跳转指令
- 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版权协议,转载请附上原文出处链接和本声明。