-1

我编写了以下代码来比较两个字符串,一个是预定义的,另一个是用户的输入。但是每次程序都显示它们是不平等的。请帮助我。我正在使用 MASM32 汇编程序。

.data
msg1 db '***Welcome to My Program***',13,10,0
msg2 db 'Please Enter a Product: ',0
msg3 db 'You Entered Shoes: ',0
p1 db 'Shoes',0

.data?
product db 100 dup(?)
.code

start:
invoke StdOut,ADDR msg1
invoke StdOut,ADDR msg2
invoke StdIn,ADDR product,100 ; receive text input

lea    esi, p1          ; Load the buffer start address
lea    edi, product     ; Load the save buffer start address
mov    ecx, 10          ; Load the operation count
repe   cmpsb            ; Compare the byte into the buffer
jne Terminate
invoke StdOut,ADDR msg3

Terminate:
invoke ExitProcess,0
END start
4

1 回答 1

1

我没有对手的 MASM32 引用,但从内存中,StdIn 也会从控制台中按回车键获取回车+换行符,这将反映在您读取的变量中。

MASM32 有一个名为 StripLF 的内置函数或类似的函数来处理这个问题。比较应该在那之后通过。

对于这样的问题,我强烈推荐 OllyDbg,它允许您单步执行代码并查看内存转储和堆栈。

编辑:刚刚在 MASM32 论坛上找到了一个线程,展示了我所描述的内容(忽略这是一个错误报告但对 StdIn 的指定行为进行评论的事实): http: //www.masm32.com/board/index.php ?PHPSESSID=b98a1a56c52fdc4c07a2bca3553302e2&topic=51.0

于 2011-06-24T10:14:57.910 回答