乘法指令
- 无符号乘法
- 格式:MUL Reg/Mem
- 功能:显式操作数*隐含操作数(看成无符号数)。
- 影响标志位:CF和OF
无符号乘法影响标志位
-如果乘积的高一半位(AH/DX)包含有乘积的有效位,则CF=1,OF=1、否则,CF=0,OF=0 。
-OF=CF=1则说明:
字节字节结果超过了8位
双字节双字节超过了32位
- 有符号乘法
- 格式:IMUL Reg/Mem
- IMUL Reg,Imm; 808286+
- IMUL Reg,Ref,Imm ;808286+
- IMUL Reg,Reg/Mem;808386+
- 功能:有符号数相乘。
- 影响标志位:CF和OF
例:
mov al,fe
mov bl,10
imul bl
除法指令
- 无符号除法指令
- 格式: DIV Reg/Mem
- 功能:
- 有符号除法指令
- 格式: IDIV Reg/Mem
- 功能:
- 除法溢出
- 被除数远大于除数时,所得的商就有可能超出它所能表达的范围。
- idiv除法溢出:
- 字节除时商不在-128~127范围内,或者在字除时商不在-32768~32767范围内。
- div除法溢出:
- 8位除法结果大于8位,16位除法运算结果大于16位。
- 举例:ax=FFFF,bl=FF,div bl
- 结果相当于FFFF/FF=101,此时AH显然放不下,所以商溢出了。
符号扩展指令
- 将字节转换成字指令
- 语句格式:CBW(convert byte to word)
- 功能:将AL中的符号扩展至AH中,操作数是隐含且固定的。
- 将字节转换成字指令
- 将字转换成双字节指令
- 语句格式:CWD
- 功能:将AX中的符号扩展至DX中,操作数是隐含且固定的。
逻辑运算
- 逻辑与:AND
- 指令的格式: AND Reg/Mem,Reg/Mem/Imm
- 受影响的标志位:CF(0),OF(0),PF,SF和ZF(AF无定义)
- 逻辑或:OR
- 指令的格式:OR Reg/Mem,Reg/Mem/Imm
- 受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF未定义)
- 逻辑非: NOT
- 指令的格式: NOT Reg/Mem
- 受影响的标志位:无
- 异或:XOR
- 指令的格式:XOR Reg/Mem,Reg/Mem/Imm
- 受影响的标志位:CF(0)、OF(0)。PF、SF和ZF(AF未定义)
- TEST 指令
- 格式:TEST Reg/Mem,Reg/Mem/Imm
- 作用:执行AND,但是不影响目标操作数。
- 受到影响的标志位:CF(0),OF(0)、PF,SF和ZF(AF未定义)
- Eg: test ax,ax
- //ax为0, 则ZF=0;
- //ax不为0, 则ZF=1;
移位指令
0001 1110
rol 1 cf = 0
0011 1100
rol 3 cf = 1
1110 0001
作业
无分支实现求绝对值
;byte ptr:
xor ax,ax
mov al,imm
cbw ;将al符号位扩展到ah中
xor al,ah
sub al,ah
;word ptr;
mov ax,imm
cwd ;将ax符号位扩展到ah中
xor ax,dx
sub ax,dx