ITEEDU

10.4 其它指令说明

10.4导航:第一页 第二页 第三页 第四页 第五页

 学了这么多的指令,想必大家对于"Z"与"NZ"已经有所认识,许多指令都与ZF标志有关,比如条件转移指令JZ/JNZ,连指令前缀REP也可以加上Z与NZ写成REPZ(ZF为1则重复)和REPNZ(ZF为0则重复)。注意在我们已经学过的指令之中还有一个指令也可以加上Z与NZ,这个指令就是循环指令LOOP:

表10-2 条件转移指令
指令助记符 用途条件 其它形式
JZ(Jump if Zero) 结果为0则跳转 ZF=1 JE(Jump if Equal)
JNZ(Jump if Not Zero) 结果不为0则跳转 ZF=0 JNE(Jump if Not Equal)
JS(Jump if Sign) 结果为负则跳转 SF=1
JNS(Jump if Not Sign) 结果为正则跳转 SF=0
JO(Jump if Overflow) 有溢出则跳转 OF=1
JNO(Jump if Not Overflow) 无溢出则跳转 OF=0
JP(Jump if Parity) 奇偶位为1则跳转 PF=1 JPE(Jump if Parity Even)
JNP(Jump if Not Parity) 奇偶位为0则跳转 PF=0 JPO(Jump if Parity Odd)
JB(Jump if Below) 低于(不高于且不等于、进位标志为1)则跳转 CF=1 JC(Jump if Carry)
JNAE(Jump if Not Above or Equal)
JNB(Jump if Not Below) 不低于(高于或等于、进位标志为0)则跳转 CF=0 JNC(Jump if Not Carry)
JAE(Jump if Above or Equal)
JBE(Jump if Below or Equal) 低于或等于则跳转 CF or ZF=1 JNA(Jump if Not Above)
JNBE(Jump if Not Below or Equal) 不低于或等于(高于)则跳转 CF or ZF=0 JA(Jump if Above)
JL(Jump if Less) 小于则跳转 SF xor OF=1 JNGE(Jump if Not Great or Equal)
JNL(Jump if Not Less) 不小于则跳转 SF xor OF=0 JGE(Jump if Great or Equal)
JLE(Jump if Less or Equal) 小于或等于则跳转 (SF xor OF)or ZF=1 JNG(Jump if Not Great)
JNLE(Jump if Not Less or Equal) 不小于或不等于则跳转 (SF xor OF)or ZF=0 JG(Jump if Great)
JCXZ(Jump if CX is Zreo) 当CX寄存器为0时跳转 CX=0

助记符:LOOPZ(Loop while Zero)
用 途:根据CX寄存器的值与ZF标志完成循环
格 式:LOOPZ 目的地址
执 行:若CX 0且ZF=1转移至目的地址继续执行,若CX=0或ZF=0则退出循
环,执行下面的指令

与这个指令相对的就是LOOPNZ,这两个指令与前面讨论过的LOOP指令有一个共同点,就是循环计数都要置入CX寄存器内,所不同的是LOOPZ/LOOPNZ还要判断ZF标志,只有ZF=1时LOOPZ才执行,反之当ZF=0时LOOPNZ执行。同REP指令前缀一样,LOOPZ/LOOPNZ有时也被写成LOOPE/LOOPNE,字母"E"同样表示"Equal"。

(2)算术运算指令

常用的算术运算指令我们都已经学过了,如加减乘除,增1减1,进位借位等,不过还有一个问题我们还没有讨论,就是带符号数的问题。当然了,首先需要指出的是在加减法运算中无需考虑这个问题,这是采用补码表示数带来的优点。而乘除法则例外,比如计算80H 2,采用MUL指令将得结果0100H,MUL指令将80H看作是无符号数128。如果我们需要计算的-128 2,就要采用带符号数的乘除指令--IMUL与IDIV:

助记符:IMUL(Signed Multiple)
用 途:计算两个带符号数相乘的结果
格 式:IMUL 寄存器
IMUL 存储单元
执 行:累加器与操作数相乘,16位的结果保存于AX寄存器中,32位结果保
存于DX-AX中。

 带符号数的除法指令是"IDIV",这两个指令除了能处理符号之外其它方面与MUL/DIV相同,在此不再过多讨论。

(3)逻辑操作指令

基本的逻辑操作有四种,与(AND)、或(OR)、异或(XOR)和非(NOT)。前三种逻辑操作在前面的章节里已经学习过了,本章讨论的"非"操作可以说是四种逻辑操作中最简单的一种:

助记符:NOT(Not)
用 途:将操作数的各个位取反
格 式:NOT 寄存器
NOT 存储单元
执 行:指定的寄存器或存储单元中为1的位均变为0,为0的位均变为1