0

我一直在写我的程序这就是我想要它做的事情:

  1. 在控制台中显示欢迎消息
  2. 等待用户输入一个从 0 到 9 的数字]
  3. 将该数字与 0 进行比较
  4. 如果是则显示消息,否则退出

这是我目前拥有的:

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

.data
capt db "SCHiM says: ",0
txt       db "Enter a number 0-9:",0

.data?

data db ?

.code

start:


call AllocConsole

push offset txt
call StdOut

push 1
push offset data
call StdIn

mov al, data

cmp al, 0h
jz eqzero

invoke ExitProcess, NULL

eqzero:

push offset capt
call StdOut
push offset data
call StdOut

endloop:
jmp endloop

invoke ExitProcess, NULL
end start 

该程序完美地组装和链接,没有任何警告或错误但是 cmp 总是返回 1,如果我打印 data 中的值(使用 StdOut),它会显示我输入的确切值。那么为什么它不起作用?

提前致谢

4

2 回答 2

2

试试这个:

cmp al, '0'

-或者-

cmp al, 48

为什么?因为您对字符“0”感兴趣,而不是数字 0。字符“0”在大多数编码中被编码为 48。

于 2010-10-03T13:48:20.950 回答
1

您可能正在以某种方式将数据地址移动到 al 。尝试 获取存储在data中的值。mov al, [data]

于 2010-10-03T13:36:53.097 回答