当前位置:
文档之家› 微机原理与接口技术算术运算指令 3-6
微机原理与接口技术算术运算指令 3-6
字操作数
(DX, AX) (AX) × (SRC)
例: MUL BL ;(AL)×(BL),乘积在AX中 MUL CX ;(AX)×(CX),乘积在DX,AX中 MUL BYTE PTR[BX];(AL) ×(BX),乘积在AX中
3.2 乘法指令——有符号数的乘法指令 格式与MUL指令类似,只是要求两操作数均为有符号数。
乘法指令对CF/OF的影响:
MUL指令: CF/OF =
0 1 乘积的高一半为零 否则
0 IMUL指令: CF/OF = 1
乘积的高一半是低一半的符号扩展 否则
例:(AL) = A5H(-5BH的补码),(BL) = 11H (1) MUL BL ; (AX) (AL)×(BL) ; A5×11= 0AF5 ; (AX) = 0AF5H CF=OF=1
0111 0001
AF=1
加6调整
0000 0110
0111 0111
5.2 非压缩BCD码调整指令
AAA
; 调整AL中的和为非压缩BCD码 ; 调整后,AL高4位 = 0,AH = AH + CF ; 调整AL中的差为非压缩BCD码 ; 调整后,AL高4位 = 0,AH = AH – CF ; AH = AX div 10,AL = AX mod 10 跟在MUL运算之后 ; AL = AH × 10 + AL,AH = 0 跟在DIV运算之前
AL&Y CL
END
二 算术运算指令
1、加法指令 2、减法指令 3、乘法指令 4、除法指令 5、十进制调整指令
乘法指令
• 无符号数的乘法指令 • 有符号数的乘法指令
3.1 乘法指令——无符号数的乘法指令 格式: MUL SRC 操作:字节操作数 (AX) (AL) × (SRC)
例:
IMUL BL ;(AX)←(AL)×(BL)
IMUL WORD PTR[SI] ;(DX,AX)←(AX)×([SI+1][SI]) 注意:MUL/IMUL指令中 ● AL(AX)为隐含的乘数寄存器; ● AX(DX,AX)为隐含的乘积寄存器; ● SRC不能为立即数; ● 除CF和OF外,对其它标志位无定义。
关于除法操作中的字长扩展问题
• 除法运算要求被除数字长是除数字长的两倍, 若不满足则需对被除数进行扩展,否则产生 错误。
1)无符号数除法扩展,只需将AH或DX清零即可。 2)有符号数而言,则是符号位的扩展。可使用符号 扩展指令CBW和CWD。
4.3 扩展指令 格式:CBW 功能:将AL中的符号位扩展到AH中,即当AL<80H, 执行CBW后,AH=0; AL>=80H时,执行CBW指令后,AH=FFH。 注意:不影响标志位 格式:CWD 功能:将AX中的符号位扩展到DX中,即当 AX<8000H,执行CWD后,DX=0; AX>=8000H时,执行CWD指令后,DX=FFFFH。 注意:不影响标志位
字操作
(AH) (AX) / (SRC) 的余数 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余数
例: DIV CL DIV WORD PTR[BX]
4.2 除法指令——有符号数的除法指令
格式: IDIV SRC
操作与DIV类似。商及余数均为有符号数,且余数符 号总是与被除数符号相同。 注意: 对于DIV/IDIV指令 • AX(DX:AX)为隐含的被除数寄存器。 • AL(AX)为隐含的商寄存器。 • AH(DX)为隐含的余数寄存器。 • SRC不能为立即数。 • 对所有标志位均无定义。
2.4 减法指令——求补(负)指令NEG 格式: NEG DST
操作: DST← 0-(DST)
利用NEG指令可得到负数的绝对值。
例:若(AL)=FCH( -4的补码),
则执行 NEG AL,
(AL)=04H, 即得到4(-4的绝对值)。
2.4 减法指令——求补(负)指令NEG
NEG指令对CF、OF的影响: CF:操作数为0时,求补的结果使CF=0,否则 CF=1。 OF:字节运算对-128求补或字运算对-32768 求补时OF=1, 否则OF=0。
X*Y,结果在DX:AX中
将乘积存在BX:CX中 将符号扩展后的Z加到 BX:CX中的乘积中去
• • • • • • •
SUB CX, 540; SBB BX, 0; MOV AX, V; CWD; SUB AX, CX; SBB DX, BX; IDIV X;
从BX:CX中减去540
从符号扩展后的V中减去(BX:CX) 并 除以X,商在AX中,余数在DX 中。
AAS
AAM AAD
AAA与AAS:CF反映非压缩BCD码加/减的进位/ 借位;OF、SF和ZF不确定。
举例:5*8=40
MOV BL, 5 MOV AL, 8
MUL BL
AAM
AX中为0028H AX中为0400H
进行除法时:16位/8位→8位商,8位余数 32位/16位→16位商,16位余数
对被除数、商及余数存放有如下规定:
16位/8位 32位/16位
被除数 AX DX:AX
商 余数 AL AH AX DX
字节操作 字操作
4.1 除法指令——无符号数的除法指令 格式: DIV SRC 操作:字节操作 (AL) (AX) / (SRC) 的商
例:将十进制数8762用压缩型BCD码表示,则为: 1000 0111 0110 0010 非压缩型BCD码: 00001000 00000111 00000110 00000010
5.1 压缩BCD码调整指令
格式: –DAA –DAS
对标志位的影响:
;调整AL中的和为压缩BCD码 ;调整AL中的差为压缩BCD码
举例:比较AL、BL、CL中带符号数的大小,将最小数放在 AL中。
程序: CMP AL,BL JNG BBB XCHG AL,BL BBB: CMP AL,CL JNG CCC XCHG AL,CL CCC: HLT
N
;AL和BL比较 ;若AL≤BL,则转 ;若AL>BL,则交换 ;AL和CL比较 ;若AL≤CL,则转 ;若AL>CL,则交换
CF反映压缩BCD码相加/相减的进位/借位状态。
• AF=1或AL寄存器低4位是A~F,则AL寄存器内容 加/减06H; • CF=1或AL寄存器高4位是A~F,则AL寄存器内容 加/减60H;
举例:48+29=77
0100 1000
MOV AL,48
MOV BL,29 ADD AL,BL DAA (AL)=71H + (AL)=77H + 0010 1001
二 算术运算指令
1 2 3 4 5 加法指令 减法指令 乘法指令 除法指令 十进制调整指令
–组合BCD码的加法十进制调整指令DAA –组合BCD码的减法的十进制调整指令DAS –加法的非组合BCD码调整指令AAA –减法的非组合BCD码调整指令AAS –乘法的BCD码调整指令AAM –除法的BCD码调整指令AAD
十进制调整指令
BCD码调整指令的说明
• 共6条,均为隐含寻址方式,隐含的操作数是
AL或AL、AH;
• 不能单独使用,要紧跟在相应的算术运算指令 之后; • 执行结果为压缩BCD码或扩展BCD码表示的十 进制数。
在PC机中,根据在存储器中的不同存放格式,BCD码又分为 •压缩(组合)BCD码:1字节(8位)中存放2个十进制数码 •非压缩(分离)BCD码:1个字节只存放1个十进制数
(2)
IMUL BL ; (AX) (AL)×(BL) ; A5×11 -5B×11=-060B F9F5(补)
; (AX) = F9F5H CF=OF=1
二 算术运算指令
1、加法指令 2、减法指令 3、乘法指令 4、除法指令 5、十进制调整指令
除法指令
• 无符号数除法 • 有符号数除法
例题:二进制四则混合算术运算
• 试计算: AX (V-(X*Y+Z-540))/X 之商 DX 余数 (X ,Y ,Z ,V 均为有符号字变量) • • • • • • • • MOV AX, X; IMUL Y; MOV CX, AX; MOV BX, DX; MOV AX, Z; CWD ADD CX, AX; ADC BX, DX;
2.5 减法指令——比较指令CMP 格式: CMP DST, SRC
操作: (DST)-(SRC)
CMP也是执行两个操作数相减,但结果不送目标 操作数,其结果只反映在标志位上。 例: CMP AL,0AH CMP CX,SI CMP DI,[BX+03]
根据标志位来判断比较的结果
1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。 2)若两个数不相等,则分两种情况考虑: 比较指令在使 ①比较的是两个无符号数 若CF=0,则DST>SRC; 用时,一般在其后 紧跟一条条件转移 若CF=1,则DST<SRC。 指令,判断比较结 ②比较的是两个有符号数 果的转向。 若OF⊕SF=0,则DST>SRC; 若OF⊕SF=1,则DST<SRC。