【发布时间】:2016-02-21 04:21:37
【问题描述】:
我刚开始学习汇编,作为一个有趣的挑战。 我已经制作了强制性的 hello world 程序以及一个简单的程序,它只要求输入然后显示它。现在我认为下一步将是一个简单的“猜我想的数字”程序,这是代码
section .data
First: db 'Try and guess the number im thinking of',10
Firstlen equ $-First
Correct: db 'YAY! you guessed my number correctly',10
Correctlen equ $-Correct
Fail: db 'You Suck',10
Faillen equ $-Fail
section .bss
num resb 5
section .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx,First
mov edx,Firstlen
int 80h
;get users number
mov eax,3
mov ebx,2
mov ecx,num
mov edx,5
int 80h
;compare number
mov edx,num
cmp edx,7
je correct; jump if equal
jne fail; jump if not equal to exit
fail:
mov eax,4
mov ebx,1
mov ecx,Fail
mov edx,Faillen
int 80h
;exit
mov eax,1
mov ebx,0
int 80h
correct:
mov eax,4
mov ebx,1
mov ecx,Correct
mov edx,Correctlen
int 80h
;exit agian
mov eax,1
mov ebx,0
int 80h
无论我做什么,总是调用失败函数。所以我假设我没有比较我的想法,但我似乎无法在网上找到任何帮助。 我做错了什么?
ps。我正在使用 nasm 2.11.05
【问题讨论】:
-
当您使用
int 0x80从用户那里获得输入时,缓冲区会被代表数字的字符填充。因此,您需要将表示数字的 ascii 字符串转换为整数,然后将cmp该数字与您要测试的值一起转换。 -
虽然这个问题并不完全重复,但答案可能会对您有所帮助:stackoverflow.com/questions/19309749/…
-
啊,我明白了。我想我还有很多阅读要做