十进制调整指令对二进制运算结果进行十进制调整,以得到十进制的运算结果。十进制在计算机中也要用二进制表示,这就是十进制编码的十进制数: BCD 码。 8086 支持压缩的 BCD 码和非压缩的 BCD 码,相应的十进制调整指令分为压缩 BCD 码调整指令和非压缩 BCD 码调整指令。
1 .压缩 BCD 码调整指令 (1)加法的十进制调整指令 DAA 语句 格式: DAA 功能:如果 AL 寄存器中低 4 位大于 9 或辅助进位( AF ) =1 ,则( AL ) = ( AL ) +6 且( AF ) =1 ;如果( AL ) >= 0A 0H 或( CF ) =1 ,则( AL ) = ( AL ) +60H 且( CF ) =1 。同时, SF 、 ZF 、 PF 均有影响。 【例】压缩 BCD 码的加法运算。 MOV AL , 68H ;( AL ) =68H ,表示压缩 BCD 码 68 MOV BL , 28H ;( BL ) =28H ,表示压缩 BCD 码 28 ADD AL , BL ;二进制加法 :( AL )=68H+28H=90H DAA ;十进制调整:( AL ) =96H ;实现压缩 BCD 码加法: 68+28=96 (2) 减法的十进制调整指令 DAS 语句
格式: DAS 功能:如果( AF ) =1 或 AL 寄存器中低 4 位大于 9 ,则( AL ) = ( AL )- 6 且( AF ) =1 ;如果( AL ) >= 0A 0H 或( CF ) =1 ,则( AL ) = ( AL )- 60H 且( CF ) =1 。同时 SF 、 ZF 、 PF 均受影响。 【例】压缩 BCD 码的减法运算。 MOV AL , 67H ;(AL)=67H, 表示压缩 BCD 码 67 MOV BL , 28H ;(BL)=28H, 表示压缩 BCD 码 28 SUB AL , BL ; ( AL )=67H-28H=3FH DAS ;十进制调整:( AL ) =39H; ;实现压缩 BCD 码减法: 67 - 28=39 2 .非压缩 BCD 码调整指令 (1)加法的非压缩 BCD 码调整指令 AAA 语句格式: AAA 功能:如果 AL 的低 4 位大于 9 或( AF ) =1 ,则: ( AL ) = ( AL ) +6 ( AH ) = ( AH ) +1 ( AF ) = ( CF ) =1 且 AL 高 4 位清零。 否则:( CF ) = ( AF ) =0 AL 高 4 位清零。 (2)减法的非压缩 BCD 码调整指令 AAS 语句格式: AAS 功能:如果 AL 的低 4 位大于 9 或( AF) =1 ,则:(AL) = ( AL )- 6 ( AH ) = ( AH )- 1 ( AF ) = ( CF ) =1 AL 高 4 位清零。 否则:( CF ) = ( AF ) =0 AL 高 4 位清零。 其他标志位 OF 、 PF 、 SF 、 ZF 不确定。 (3)乘法的非压缩 BCD 码调整指令 AAM 语句格式: AAM 功能:被调整的乘积在 AX 中,对 AL 按 10 取模,则: ( AL )/ 0AH → AH (商): AL (余数) 其中 AH 为商, AL 为余数,标志位 AF 、 CF 、 OF 、 PF 、 SF 、 ZF 受影响。 (4)除法的非压缩 BCD 码调整指令 AAD 语句格式: AAD 功能:除法运算前,先调整被除数 AX 内容,使: ( AL ) = ( AL ) + ( AH ) *0AH ( AH ) =0 即把非压缩型十进制数变成二进制数。 |
电工学习网 ( )
GMT+8, 2021-12-6 20:45