我正在尝试用汇编代码制作数字猜谜游戏,范围从1到1开始,然后每次得到正确的答案时增加1。
出于某种原因,虽然当我运行程序时,输出范围的数字是非常高而不是1,当我输入1这是第一轮的答案时,它表示我输了而不是继续。所以如果有人能帮我解决那些很棒的问题!
include \masm32\include\masm32rt.inc
.data
formatString BYTE "guess a number from 1 to %d , if you get it right you continue", 0ah, 0dh, 0
guessstr BYTE 11 DUP (0)
guess DWORD ?
range DWORD 0
answer DWORD 1
prompt BYTE "You lose!", 0
.code
main proc
call seedrand
nextlevel:
move eax, 0
mov range, ebx
add ebx, 1
pushd ecx
call randnum
invoke crt_printf, ADDR formatString, ebx
invoke StdIn, ADDR guessstr, 10
invoke atodw, ADDR guessstr
mov guess, edx
add ecx, 1
cmp eax, ebx
je nextlevel
invoke StdOut, ADDR prompt
jnz skip
seedrand proc
; seeds the random number generator
; _stdcall
invoke GetTickCount ; result goes in eax
invoke nseed, eax
ret
seedrand endp
randomnum proc
; generate a random number
; _stdcall
mov eax, [esp+4]
invoke nrandom, eax
ret 4
randomnum endp
skip:
; return 0
mov eax, 0
ret
main endp
end main
答案 0 :(得分:2)
move eax, 0
这不是有效的指令。难道你打算初始化上限?因为那是你忘了的东西!将其替换为xor ebx, ebx
cmp eax, ebx je nextlevel
您刚刚将用户的猜测从EDX
寄存器移至 guess 变量。在这里你应该与其中一个进行比较,当然不是上限。
invoke StdOut, ADDR prompt jnz skip ; seedrand proc
显示“你输了!”你落入 seedrand 程序。更好地使用jmp skip
。