算数类指令经常会影响标志位,搞清楚以下两个概念:
对标志没有定义:指令执行后这些标志是任意的、不可预测〔就是谁也不知道是0还是1〕
对标志没有影响:指令执行不改变标志状态
注意有符号数进行计算是用其补码进行计算的,有符号数在电脑里是以4个二进制位表示一个十进制位0~9,高4位任意,通常默认为0
例如:
二进制编码的十进制数:一位十进制数用4位二进制编码来表示
8086支持压缩BCD码和非压缩BCD码的调整运算
真值 8 64
二进制编码 08H 40H
压缩BCD码 08H 64H
非压缩BCD码 08H 0604H
压缩BCD码加(DAA)、减(DAS)调整指令
操作数隐含,为寄存器AL
〔ADD AL,i8/r8/m8〕
〔ADC AL,i8/r8/m8〕
DAA〔注意课本P47例题!!两条件都满足的情况。〕
使用条件:
当AF标志位为0;或AL寄存器的低4位超出BCD数的计数符号<0AH-0FH>,则AL寄存器的内容加06F,且将AF置1;
当CF标志位为1,或AL 寄存器的高四位超出BCD数的计数符号<0AH-0FH>,则AL寄存器的内容加60H,且将CF置1.
;AL←将AL的加和调整为压缩BCD码
〔SUB AL,i8/r8/m8〕
〔SBB AL,i8/r8/m8〕
DAS
使用条件:
1. 当AF标志位为1;或AL寄存器的低4位超出BCD数的计数符号<0AH-0FH>,则AL寄存器的内容减06F,且将AF置1;
2. 当CF标志位为1,或AL 寄存器的高四位超出BCD数的计数符号<0AH-0FH>,则AL寄存器的内容减60H,且将CF置1.
;AL←将AL的减差调整为压缩BCD码
注意:
使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指令;
DAA和DAS指令对OF标志无定义,按结果影响其他标志,例如CF反映压缩BCD码相加或减的进位或借位状态.
乘法类
乘法指令
无符号乘法
MUL r8/m8;无符号字节乘法,AX←AL×r8/m8
MUL r16/m16;无符号字乘法;←AX×r16/m16
操作数:
目的操作数隐含,为AX、AL;
源操作数为imm8,reg8或imm16,reg16
IMUL r8/m8;有符号字节乘法,AX←AL×r8/m8
IMUL r16/m16;有符号字乘法,←AX×r16/m16
注意:
立即数不能作操作数:MUL 3是错的;
分清楚是有符号乘法还是无符号乘法;
影响标志位。
对标志位的影响:
乘法指令如下影响OF和CF标志:
MUL指令——假设乘积的高一半〔AH或DX〕为0,则OF=CF=0;否则OF=CF=1
IMUL指令——假设乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均1
乘法指令对其他状态标志没有定义
标识为影响例如:
mov al,0b4h ;al=b4h=180
mov bl,11h ;bl=11h=17
mul bl ;ax=Obf4h=3060
;OF=CF=1,AX高8位不为0
mov al,0b4h ;al=b4h=-76
mov bl,
算术运算指令 来自淘豆网m.daumloan.com转载请标明出处.