英特尔组装cmp操作

时间:2016-02-21 04:21:37

标签: assembly nasm

我刚开始学习装配,作为一个有趣的挑战。 我已经制作了强制性的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

1 个答案:

答案 0 :(得分:0)

你可以使用je / jne的短跳跃等价物,因为它们在同一个模块中:

jz correct
jnz fail

je / jne用于跳过内存中的“更远”距离。他们基本上做同样的事情。进行比较的减法,然后根据设置的标志跳转。在这种情况下,如果它们相等则设置零标志。