汇编学习-跳转指令

在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:从子程序返回。