十进制调整指令对二进制运算结果进行十进制调整,以得到十进制的运算结果。十进制在计算机中也要用二进制表示,这就是十进制编码的十进制数: 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
即把非压缩型十进制数变成二进制数。
最后
以上就是高高大米最近收集整理的关于十进制调整指令c语言,十进制调整指令的全部内容,更多相关十进制调整指令c语言内容请搜索靠谱客的其他文章。
发表评论 取消回复