大会编号猜测游戏

时间:2016-04-11 18:56:03

标签: assembly random x86 masm32

我正在尝试用汇编代码制作数字猜谜游戏,范围从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

1 个答案:

答案 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