汇编语言je jump功能

时间:2009-10-17 19:04:37

标签: assembly conditional-statements

我试图在网上找到汇编语言函数“je”的用法。我读到,如果相等,那意味着跳跃,这正是我想要的。这个函数的实际用法是什么,换句话说,如何输入这个函数来检查一个值,如果它等于某个值就跳转?

请告诉我。

顺便说一下,如果有所作为,我正在使用NASM。

5 个答案:

答案 0 :(得分:19)

假设您要检查EAX是否等于5,并根据比较结果执行不同的操作。换句话说,是一个if语句。

  ; ... some code ...

  cmp eax, 5
  je .if_true
  ; Code to run if comparison is false goes here.
  jmp short .end_if
.if_true:
  ; Code to run if comparison is true goes here.
.end_if:

  ; ... some code ...

答案 1 :(得分:13)

如果设置了FLAGS寄存器中的“相等标志”(也称为“零标志”),则会跳转。这是由算术运算或TESTCMP等指令设置的。

例如:(如果记忆对我有用,这是正确的: - )

cmp eax, ebx    ; Subtract EBX from EAX -- the result is discarded
                ; but the FLAGS register is set according to the result.
je .SomeLabel   ; Jump to some label if the result is zero (ie. they are equal).
                ; This is also the same instruction as "jz".

答案 2 :(得分:6)

我必须说je func是测试是否设置了零标志然后跳转到其他地方或继续下一条指令。

test cx, cx
je   some_label

测试指令只对两个操作数进行按位AND,并根据AND结果设置FLAG。然后,je指令使用ZERO标志来决定跳转或继续。

上面的代码用于检查cx是否为零。

  • 如果cx为零,test将设置为零标志,然后je将导致跳转到某个地方;
  • 如果cx不为零,test将不会设置零标志,je将继续执行后面的指令。

注意:je不是测试相等,而是测试在此之前由某些指令设置的ZERO标志。

答案 3 :(得分:2)

您通常会在je之前加cmp(或test或等效),这会在EFLAGS寄存器中设置一个标记。这是NASM中一个简单的回显服务器的link,它可能会有所帮助。忽略恼人的Google广告。

je的示例用法可能是:

    cmp eax, ebx
    je  RET_FAIL
    jmp RET_SUCCESS

RET_FAIL:
    push 1
    pop  eax
    ret

RET_SUCCESS:
    push 0
    pop eax
    ret

答案 4 :(得分:1)

好吧,我终于找到了答案。 :P基本上你在cmp调用后调用je label_to_jump_to。

如果cmp显示两个值相等,则je将跳转到指定的标签。如果没有,它将继续执行。