汇编语言复习~跳转指令、移位指令和标志位

跳转指令

  • jc,如果CF = 1,则跳转至指定位置。
  • jnc,如果CF = 0,则跳转。
    CF为进位或借位标识符,被运算结果所影响。
  • jz,如果ZF = 1,则跳转。
  • jnz,如果ZF = 0,则跳转。
    ZF为零标志位,如果运算结果为0,则ZF = 1。
  • je,通常搭配cmp指令使用,如果源操作数和目标操作数相等,则跳转。
    记法:Jump if equal.
    另,这里做说的源操作数和目标操作数,我一般喜欢表述为第一操作数和第二操作数,实际上它们是一个意思,假如有指令CMP AX,[0000H],那么AX中的值为第一操作数/源操作数,[0000H]中的字(2个字节,16位2进制数,2位16进制数)为第二操作数/目标操作数,下同
  • jne,如果不相等,则跳转。
    记法:Jump if not equal.
  • jg,带符号的比较,如果源操作数大于目标操作数,则跳转。
    记法:Jump if greater.
  • jge,带符号的比较,大于等于。
  • ja,不带符号的比较,大于。
    记法:Jump if above.
  • jae,不带符号的比较,大于等于。
  • jl,带符号的比较,小于。
    记法:Jump if less.
  • jle,带符号的比较,小于等于。
  • jb,不带符号的比较,小于。
    记法:Jump if below.
  • jbe,不带符号的比较,小于等于。
  • jo,如果前一条指令将标志位OF置为1,那么跳转。
    OF为溢出标志位。
  • js,前一条指令将SF置为1,则跳转。
    SF为符号标志为,如果上一步运算的结果为负,则SF = 1,否则为0。
    补充:PF为奇偶标志位,如果上一步运算操作所得到的结果中1的个数为偶数个,那么PF = 1,为奇数则PF = 0。
  • jcxz,如果通用寄存器CX中的值为0,则跳转。
    记法:Jump if CX equals zero.

移位指令

考试会考到的基本只有两种类型,即普通移位指令和循环移位指令。普通移位指令又分为算术移位和逻辑移位。循环移位指令又分为循环移位和带进位的循环移位。

  • 1)算数移位指令:算数移位保持符号位不变。
    ①算数左移SAL:将最高位移入CF,最低位补0。
    在这里插入图片描述
    ②算数右移SAR:最低位移入CF,最高位补移位前的最高位,即符号位。
    在这里插入图片描述
  • 2)逻辑移位指令:逻辑移位全都补0。
    ①逻辑左移SHL:最高位移入CF,最低位补0。
    在这里插入图片描述
    可以看到SHL和SAL是相同的。
    ②逻辑右移SHR:最低位移入CF,最高位补0。(注意,算数右移SAR最高位补原符号位)
    在这里插入图片描述
  • 循环移位指令:移出的补到空缺处。
    ①循环左移ROL:最高位移入CF,同时移出的最高位补进最低位(因为循环)。
    在这里插入图片描述
    ②循环右移ROR:最低位移入CF,同时最低位补进最高位。
    在这里插入图片描述
  • 带进位的循环移位:CF起到关键作用。
    ①带进位的循环左移RCL:将移出的最高位移入CF,将原先CF的值补进最低位。
    在这里插入图片描述
    ②带进位的循环右移RCR:将移出的最低位移入CF,将原先CF的值补进最高位。
    在这里插入图片描述
  • 注意移位指令的格式:XXX oper1,CL/1,第二操作数只能是CL或者1,不能是其它寄存器、内存或立即数。即,只能移动一位或CL中指定的位数。

标志位

  • ZF:零标志位。运算执行后,结果为0,则ZF被置1,结果为1,ZF置0。
  • PF:奇偶标志位。运算结果中含有偶数个1,PF = 1,奇数个1,PF = 0。
  • SF:符号标志位。运算结果为负,SF = 1。
  • CF:进位借位标志位。在无符号运算中,CF记录了运算时向更高位的进位值或者从更高位的借位置。或者可以理解为,如果运算产生了向更高位的进位,或者从更高位借位,那么CF = 1。此为,在移位运算中,CF也起到了至关重要的作用,每一个移位运算(SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR)都用到了它。
  • OF:溢出标志位。在有符号运算时,如果运算结果超出了机器数的表示范围,那么OF = 1。

版权声明:本文为fatfairyyy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。