当前位置:   article > 正文

跳转(jmp)指令_jmp rax

jmp rax

跳转(jmp)指令

正常执行的情况下,指令按照它们出现的顺序一条一条地执行。跳转(jmp)指令会导致执行切换到程序中一个全新的位置。

在汇编代码中,这些跳转的目的地通常用一个标号(label)指明。

考虑下面的汇编代码序列:

movq $0, %rax
jmp .L1
movq (%rax), %rdx
.L1:
	popq %rdx
  • 1
  • 2
  • 3
  • 4
  • 5

指令jmp .L1会导致程序跳过movq指令,而从popq指令开始继续执行。在产生目标代码文件时,汇编器会确定所有带标号指令的地址,并将跳转目标(目的指令的地址)编码为跳转指令的一部分。

下表列举了不同的跳转指令。jmp指令是无条件跳转。它可以是直接跳转,即跳转目标是作为指令的一部分编码的;也可以是间接跳转,即跳转目标是从寄存器或内存位置中读出的。汇编语言中,直接跳转是给出一个标号作为跳转目标的,例如上面的例子中标号.L1

间接跳转的写法是*后面跟一个操作数指示符。举个例子:

指令jmp *%rax用寄存器%rax中的值作为跳转目标。

指令jmp *(%rax)%rax中的值作为读地址,从内存中读出跳转目标。

指令同义名跳转条件描述
jmp Label1直接跳转
jmp *Operand1间接跳转
je LabeljzZF相等/零
jne Labeljnz~ZF不相等/非零
js LabelSF负数
jns Label~SF非负数
jg Labeljnle~(SF ^ OF) & ~ZF大于(有符号>)
jge Labeljnl~(SF ^ OF)大于或等于(有符号>=)
jl LabeljngeSF ^ OF小于(有符号<)
jle Labeljng(SF ^ OF) | ZF小于或等于(有符号<=)
ja Labeljnbe~CF & ~ZF超过(无符号>)
jae Labeljnb~CF超过或相等(无符号>=)
jb LabeljnaeCF低于(无符号<)
jbe LabeljnaCF | ZF低于或相等(无符号<=)

表中所示的其他跳转指令都是有条件的——它们根据条件码的某种组合,或者跳转,或者继续执行代码序列中下一条指令。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/486956
推荐阅读
相关标签
  

闽ICP备14008679号