在x86汇编语言中,跳转(jump)指令用于控制程序的执行流程,可以分为几类:无条件跳转、条件跳转和循环控制跳转。以下是一些常见的跳转指令:
无条件跳转
JMP
:无条件跳转到指定标签或地址。在x86实模式下,最高可以跳转到0xFFFFF位置。- 而在实模式下BIOS只能寻址到0xFFFF。
条件跳转
条件跳转指令基于标志寄存器(FLAGS)中的标志位(如零标志ZF、进位标志CF等)来决定是否跳转。
JE
/JZ
:如果等于(Zero Flag置位),则跳转。JNE
/JNZ
:如果不等于(Zero Flag未置位),则跳转。JA
/JNBE
:如果大于(无符号,Above),则跳转。JAE
/JNB
:如果大于等于(无符号,Above or Equal),则跳转。JB
/JNAE
:如果小于(无符号,Below),则跳转。JBE
/JNA
:如果小于等于(无符号,Below or Equal),则跳转。JG
/JNLE
:如果大于(有符号,Greater),则跳转。JGE
/JNL
:如果大于等于(有符号,Greater or Equal),则跳转。JL
/JNGE
:如果小于(有符号,Less),则跳转。JLE
/JNG
:如果小于等于(有符号,Less or Equal),则跳转。JC
:如果进位(Carry Flag置位),则跳转。JNC
:如果不进位(Carry Flag未置位),则跳转。JO
:如果溢出(Overflow Flag置位),则跳转。JNO
:如果不溢出(Overflow Flag未置位),则跳转。JS
:如果符号(Sign Flag置位),则跳转。JNS
:如果非符号(Sign Flag未置位),则跳转。JP
/JPE
:如果奇偶(Parity Flag置位),则跳转。JNP
/JPO
:如果非奇偶(Parity Flag未置位),则跳转。
循环控制
LOOP
:减少计数器,并在计数器非零时跳转。LOOPE
/LOOPZ
:在LOOP
的基础上,加上等于(Zero Flag置位)的条件。LOOPNE
/LOOPNZ
:在LOOP
的基础上,加上不等于(Zero Flag未置位)的条件。
间接跳转
CALL
:无条件跳转到子程序,并在子程序结束后返回。RET
:从子程序返回。