我刚开始学习装配,作为一个有趣的挑战。 我已经制作了强制性的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
答案 0 :(得分:0)
你可以使用je / jne的短跳跃等价物,因为它们在同一个模块中:
jz correct
jnz fail
je / jne用于跳过内存中的“更远”距离。他们基本上做同样的事情。进行比较的减法,然后根据设置的标志跳转。在这种情况下,如果它们相等则设置零标志。