十進制調(diào)整指令對二進制運算結果進行十進制調(diào)整,以得到十進制的運算結果。十進制在計算機中也要用二進制表示,這就是十進制編碼的十進制數(shù): bcd 碼。 8086 支持壓縮的 bcd 碼和非壓縮的 bcd 碼,相應的十進制調(diào)整指令分為壓縮 bcd 碼調(diào)整指令和非壓縮 bcd 碼調(diào)整指令。
1 .壓縮 bcd 碼調(diào)整指令
(1)加法的十進制調(diào)整指令 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 ;十進制調(diào)整:( al ) =96h
;實現(xiàn)壓縮 bcd 碼加法: 68+28=96
(2) 減法的十進制調(diào)整指令 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 ;十進制調(diào)整:( al ) =39h;
;實現(xiàn)壓縮 bcd 碼減法: 67 - 28=39
2 .非壓縮 bcd 碼調(diào)整指令
(1)加法的非壓縮 bcd 碼調(diào)整指令 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 碼調(diào)整指令 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 碼調(diào)整指令 aam
語句格式: aam
功能:被調(diào)整的乘積在 ax 中,對 al 按 10 取模,則:
( al )/ 0ah → ah (商): al (余數(shù))
其中 ah 為商, al 為余數(shù),標志位 af 、 cf 、 of 、 pf 、 sf 、 zf 受影響。
(4)除法的非壓縮 bcd 碼調(diào)整指令 aad
語句格式: aad
功能:除法運算前,先調(diào)整被除數(shù) ax 內(nèi)容,使:
( al ) = ( al ) + ( ah ) *0ah ( ah ) =0
即把非壓縮型十進制數(shù)變成二進制數(shù)。