【问题标题】:Assembly language je jump function汇编语言je跳转函数
【发布时间】:2010-12-07 15:58:24
【问题描述】:

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

请告诉我。

顺便说一句,我正在使用 NASM,如果这有影响的话。

【问题讨论】:

    标签: assembly conditional-statements


    【解决方案1】:

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

    test cx, cx
    je   some_label
    

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

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

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

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

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 如果 RET_SUCCESS 出现在 RET_FAIL 之前,则不需要第二次跳转。
      • 谢谢,不过这只是一个未评分学生作业的复制粘贴。
      【解决方案3】:

      假设您要检查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 ...
      

      【讨论】:

      • 这里使用的是哪种汇编语法?
      • 它可以检查除 EAX 之外的任何其他寄存器吗?
      【解决方案4】:

      如果设置了FLAGS 寄存器中的“相等标志”(也称为“零标志”),这将跳转。这是算术运算或TEST 和CMP 等指令的结果。

      例如:(如果我没记错的话,这是正确的:-)

      cmp eax, ebx ;从 EAX 中减去 EBX——结果被丢弃
                      ;但是FLAGS寄存器是根据结果设置的。
      je .SomeLabel ;如果结果为零(即它们相等),则跳转到某个标签。
                      ;这也是与“jz”相同的指令。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • Edsger Dijkstra 一定讨厌汇编程序;它充满了 GOTO 的 :-)
        • 它不必遵循CMP 指令,尽管这是最常见的情况。正如其他人所说,Jcc 指令可以遵循任何设置FLAGS 的指令。这包括几乎所有的算术指令,以及其他一些指令。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        相关资源
        最近更新 更多