BCD码运算的十进制调整指令
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
8088的调整指令主要用于十进制数的调整。这些指令包括: AAA:对AL中非压缩BCD码求和的结果进行调整。 AAS:对AL中非压缩BCD码求差的结果进行调整。 AAD :在实现十进制除法时,在除法指令前对 AX 用中非压 缩BCD码表示的十进制数进行调整。 AAM:在实现十进制乘法时,对AX中两个非压缩BCD码相乘 的结果进行调整。
BCD码运算的十进制调整指令
专用于对BCD码运算的结果进行调整 包括:AAA、DAA、AAS、DAS、AAM、AAD 均为隐含寻址,隐含的操作数为AL和AH 为何要对BCD码的运算结果进行调整? BCD码本质上是十进制数,即应遵循逢十
进一的规则。而计算机是按二进制(十六 进制)进行运算,并未按十进制规则进行 运算。
这个1代表了16,而实际上 仅应为10,即多进了6。
结果应为17,而计算机相加为11,原因在于 运算过程中,如遇到低4位往高4位产生进位 时(此时AF=1)是按逢十六进一的规则,但 BCD码要求逢十进一,因此只要产生进位,个 位就会少6,这就要进行加6调正。
5
实际上当低4位的结果>9(即A~F之间)时, 也应进行加6调正 (原因是逢十没有进位,故 用加6的方法强行产生进位) 。 如对上例的结果进行加6: 0001 0001 11 + 0000 0110 6 0000 0111 17 ^ 0000 1111 ---------------------1 0000 1111
9
例1:按十进制乘法计算7×8=? 程序段如下: MOV AL,07H ;(AL)=07H MOV CL,08H ;(CL)=08H MUL CL ;(AX)=0038H AAM ;(AH)=05H,AL)=06H 所得结果为非压缩的BCD码。 例2:把3AH转换成等值的十进制数。 MOV AL,3AH ;58 AAM ;(AH)=05H,(AL)=08H
10
4) 除法的十进制调正指令AAD
对非压缩BCD除法运算进行调整。调整操作 为: (AL)←(AH)×0AH+(AL) AH ← 0 隐含的操作寄存器为AH,AL; AAD要在DIV指令之前使用; 影响标志位PF、SF、ZF,其它无定义; 用AAD可实现≤99的十-二进制转换。
11
例1:按十进制除法计算55÷7=?
8
3) 乘法的十进制调正指令AAM
对AX中由两个非压缩BCD码相乘的结果进行 调整。调整操作为: (AL)/0AH, (AH)←商,(AL)←余数
隐含的操作寄存器为AL和AH; AAM跟在MUL指令之后使用; 影响标志位PF、SF、ZF,其它无定义; 用AAM可实现≤99的二-十进制转换。
12
3
AAA指令的操作如下:
如果AL的低4位>9∨AF=1,则:
① AL←(AL)+6,(AH)←(AH)+1,AF←1 ② AL←((AL)∧0FH) ③ CF←AF
否则AL←(AL)∧0FH
4
调整原理:先看一个例子 计算8+9 0000 1000 见右式 +0000 1001 0001 0001 = 11
程序段如下: MOV AX, 0505H ;(AX)=55BCD MOV CL, 07H ;(CL)= 7 AAD ;(AX)=0037H DIV CL ;(AH)=6, (AL)=7 所得结果为非压缩的BCD码(商7余6)。
例2:把73转换成等值的二进制数。
MOV AX, 0703H ;(AX)= 73BCD AAD ;(AX)= 0049H
DAA:对AL中的两个压缩BCD码相加之和进行调整,得到用 压缩BCD码表示的十进制和。
DAS:对AL中的两个压缩BCD码相减之差进行调整,得到用 压缩BCD码表示的十进制差。
2
加法的十进制调整指令
非压缩BCD码加法调整AAA
本指令对在AL中的由两个未组合的BCD码相 加后的结果进行调正,得到一个正确的未 组合的BCD码。 AAA指令只影响AF和CF,其余标志无定义。 AAA指令应紧跟在ADD或ADC指令之后。
6
压缩BCD码加法调整DAA
两个压缩BCD码相加结果在AL中,通过 DAA调整得到一个正确的压缩BCD码. 指令操作(调整方法): 若AL的低4位>9∨AF=1 则(AL)←(AL)+6,AF←1 若AL的高4位>9∨CF=1 则(AL)←(AL)+60H,CF←1 除OF外,DAA指令影响所有其它标志。 DAA指令应紧跟在ADD或ADC指令之后。
7
例: MOV AL,48H MOV BL,74H ADD AL,BL DAA
0100 + 0111 1011 + 0110 1 0010
1000 0100 1100 0110 0010
48H 74H BCH 66H 1 22H
(进位) (进位) 执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令 执行加66H调整,最后结果为: (AL)=22H, CF=1, AF=1
8088的调整指令主要用于十进制数的调整。这些指令包括: AAA:对AL中非压缩BCD码求和的结果进行调整。 AAS:对AL中非压缩BCD码求差的结果进行调整。 AAD :在实现十进制除法时,在除法指令前对 AX 用中非压 缩BCD码表示的十进制数进行调整。 AAM:在实现十进制乘法时,对AX中两个非压缩BCD码相乘 的结果进行调整。
BCD码运算的十进制调整指令
专用于对BCD码运算的结果进行调整 包括:AAA、DAA、AAS、DAS、AAM、AAD 均为隐含寻址,隐含的操作数为AL和AH 为何要对BCD码的运算结果进行调整? BCD码本质上是十进制数,即应遵循逢十
进一的规则。而计算机是按二进制(十六 进制)进行运算,并未按十进制规则进行 运算。
这个1代表了16,而实际上 仅应为10,即多进了6。
结果应为17,而计算机相加为11,原因在于 运算过程中,如遇到低4位往高4位产生进位 时(此时AF=1)是按逢十六进一的规则,但 BCD码要求逢十进一,因此只要产生进位,个 位就会少6,这就要进行加6调正。
5
实际上当低4位的结果>9(即A~F之间)时, 也应进行加6调正 (原因是逢十没有进位,故 用加6的方法强行产生进位) 。 如对上例的结果进行加6: 0001 0001 11 + 0000 0110 6 0000 0111 17 ^ 0000 1111 ---------------------1 0000 1111
9
例1:按十进制乘法计算7×8=? 程序段如下: MOV AL,07H ;(AL)=07H MOV CL,08H ;(CL)=08H MUL CL ;(AX)=0038H AAM ;(AH)=05H,AL)=06H 所得结果为非压缩的BCD码。 例2:把3AH转换成等值的十进制数。 MOV AL,3AH ;58 AAM ;(AH)=05H,(AL)=08H
10
4) 除法的十进制调正指令AAD
对非压缩BCD除法运算进行调整。调整操作 为: (AL)←(AH)×0AH+(AL) AH ← 0 隐含的操作寄存器为AH,AL; AAD要在DIV指令之前使用; 影响标志位PF、SF、ZF,其它无定义; 用AAD可实现≤99的十-二进制转换。
11
例1:按十进制除法计算55÷7=?
8
3) 乘法的十进制调正指令AAM
对AX中由两个非压缩BCD码相乘的结果进行 调整。调整操作为: (AL)/0AH, (AH)←商,(AL)←余数
隐含的操作寄存器为AL和AH; AAM跟在MUL指令之后使用; 影响标志位PF、SF、ZF,其它无定义; 用AAM可实现≤99的二-十进制转换。
12
3
AAA指令的操作如下:
如果AL的低4位>9∨AF=1,则:
① AL←(AL)+6,(AH)←(AH)+1,AF←1 ② AL←((AL)∧0FH) ③ CF←AF
否则AL←(AL)∧0FH
4
调整原理:先看一个例子 计算8+9 0000 1000 见右式 +0000 1001 0001 0001 = 11
程序段如下: MOV AX, 0505H ;(AX)=55BCD MOV CL, 07H ;(CL)= 7 AAD ;(AX)=0037H DIV CL ;(AH)=6, (AL)=7 所得结果为非压缩的BCD码(商7余6)。
例2:把73转换成等值的二进制数。
MOV AX, 0703H ;(AX)= 73BCD AAD ;(AX)= 0049H
DAA:对AL中的两个压缩BCD码相加之和进行调整,得到用 压缩BCD码表示的十进制和。
DAS:对AL中的两个压缩BCD码相减之差进行调整,得到用 压缩BCD码表示的十进制差。
2
加法的十进制调整指令
非压缩BCD码加法调整AAA
本指令对在AL中的由两个未组合的BCD码相 加后的结果进行调正,得到一个正确的未 组合的BCD码。 AAA指令只影响AF和CF,其余标志无定义。 AAA指令应紧跟在ADD或ADC指令之后。
6
压缩BCD码加法调整DAA
两个压缩BCD码相加结果在AL中,通过 DAA调整得到一个正确的压缩BCD码. 指令操作(调整方法): 若AL的低4位>9∨AF=1 则(AL)←(AL)+6,AF←1 若AL的高4位>9∨CF=1 则(AL)←(AL)+60H,CF←1 除OF外,DAA指令影响所有其它标志。 DAA指令应紧跟在ADD或ADC指令之后。
7
例: MOV AL,48H MOV BL,74H ADD AL,BL DAA
0100 + 0111 1011 + 0110 1 0010
1000 0100 1100 0110 0010
48H 74H BCH 66H 1 22H
(进位) (进位) 执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令 执行加66H调整,最后结果为: (AL)=22H, CF=1, AF=1