pentiun指令系統(tǒng)之算術(shù)運(yùn)算指令.ppt
-
資源ID:6399161
資源大?。?span id="25c75bz" class="font-tahoma">540.81KB
全文頁數(shù):60頁
- 資源格式: PPT
下載積分:14.9積分
快捷下載
會(huì)員登錄下載
微信登錄下載
微信掃一掃登錄
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。
|
pentiun指令系統(tǒng)之算術(shù)運(yùn)算指令.ppt
內(nèi)容 提供加 減 乘 除 轉(zhuǎn)換五種基本算術(shù)操作 利用十進(jìn)制調(diào)整指令和ASCII調(diào)整指令對(duì)BCD碼表示的十進(jìn)制數(shù)進(jìn)行算術(shù)運(yùn)算 對(duì)帶符號(hào)數(shù)與無符號(hào)數(shù)進(jìn)行乘 除運(yùn)算 一 加法指令 Addition 二 減法指令 Subtraction 三 乘法指令 Multiplication 四 除法指令 Division 五 類型轉(zhuǎn)換指令 TypeTrans 六 BCD碼運(yùn)算指令 二 算術(shù)運(yùn)算指令 Arithmetic 特點(diǎn) 大部分都影響標(biāo)志位 不同指令影響不同 1 加 減法指令影響SF ZF AF PF CF OF 2 加1和減1指令不影響CF 3 乘法指令影響CF OF 4 除法指令使大部分標(biāo)志位的狀態(tài)不確定 5 對(duì)BCD碼調(diào)整指令對(duì)標(biāo)志位的影響不同 源操作數(shù)可以是立即數(shù) 通用寄存器或者是存儲(chǔ)器中的數(shù) 目的操作數(shù)可為通用寄存器或存儲(chǔ)器中的數(shù) 都可以用于字節(jié) 字 雙字的運(yùn)算 8位二進(jìn)制數(shù)可以表示十進(jìn)制數(shù)的范圍 8位無符號(hào)十進(jìn)制數(shù)的范圍 0 2558位帶符號(hào)十進(jìn)制數(shù)的范圍 128 12716位二進(jìn)制數(shù)可以表示十進(jìn)制數(shù)的范圍 16位無符號(hào)十進(jìn)制數(shù)的范圍 0 6553516位帶符號(hào)十進(jìn)制數(shù)的范圍 32768 32767字長為n位的帶符號(hào)數(shù) 補(bǔ)碼能表示范圍為 2n 1 2n 1 1如果運(yùn)算結(jié)果超出該范圍 叫補(bǔ)碼溢出 簡稱溢出 算術(shù)運(yùn)算指令涉及的一些問題 以8位二進(jìn)制數(shù)為例分析一下數(shù)的溢出與進(jìn)位情況 下面分4種情況加以討論 1 帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出 2 無符號(hào)數(shù)溢出 3 帶符號(hào)數(shù)溢出 4 帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出 1 帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出 二進(jìn)制數(shù) 看作無符號(hào)數(shù) 看作帶符號(hào)數(shù) 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 4 11 15 4 11 15 相 加 標(biāo)志 CF 0 OF 0 CF 0 OF 0 溢出 不溢出 不溢出 同符號(hào)數(shù)相加 結(jié)果符號(hào)與其相同 2 無符號(hào)數(shù)溢出 二進(jìn)制數(shù) 看作無符號(hào)數(shù) 看作帶符號(hào)數(shù) 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0 7 251 258 7 5 2 相 加 標(biāo)志 CF 1 OF 0 CF 1 OF 0 溢出 溢出 若考慮進(jìn)位所代表的數(shù)值 結(jié)果正確 不溢出 異號(hào)數(shù)相加 不可能有溢出 CF 1 3 帶符號(hào)數(shù)溢出 二進(jìn)制數(shù) 看作無符號(hào)數(shù) 看作帶符號(hào)數(shù) 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 9 124 133 9 124 133 相 加 標(biāo)志 CF 0 OF 1 CF 0 溢出 不溢出 溢出 正正相加 結(jié)果為負(fù) 結(jié)果錯(cuò) OF 1 4 帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出 二進(jìn)制數(shù) 看作無符號(hào)數(shù) 看作帶符號(hào)數(shù) 1 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 135 245 380 121 11 132 相 加 標(biāo)志 CF 1 OF 1 CF 1 OF 1 溢出 溢出 若考慮進(jìn)位CF所代表的數(shù)值 結(jié)果正確 溢出 負(fù)負(fù)相加 結(jié)果為正 結(jié)果錯(cuò) CF 1 結(jié)論 1 帶符號(hào)數(shù)相加溢出根據(jù)OF判斷帶符號(hào)數(shù)產(chǎn)生溢出 OF 1同符號(hào)數(shù)相加 結(jié)果符號(hào)與其相反 產(chǎn)生溢出 結(jié)果是錯(cuò)誤的 OF 0沒有產(chǎn)生溢出 結(jié)果是正確的 2 無符號(hào)數(shù)相加溢出根據(jù)CF判斷無符號(hào)數(shù)產(chǎn)生溢出 CF 1無符號(hào)數(shù)相加產(chǎn)生溢出 但考慮進(jìn)位所代表的數(shù)值后 結(jié)果并沒有錯(cuò) 一 加法指令 Arithmetic 1 ADD Addition 加法指令2 ADC Addwithcarry 帶進(jìn)位加法指令3 XADD ExchangeAdd 字節(jié)交換加法指令4 INC Incrementby1 加1指令 1 ADD Addition 加法指令指令格式 ADDdest src dest dest src Src 立即數(shù) 寄存器 存儲(chǔ)器 dest 寄存器 存儲(chǔ)器 例 ADDCX 1000H 寄存器 立即數(shù)ADDDX SI 寄存器 寄存器ADD BX DI AX 寄存器 存儲(chǔ)器ADDEAX BX 2000H 存儲(chǔ)器 寄存器ADDBYTEPTR DI 30H 存儲(chǔ)器 立即數(shù) 特點(diǎn) 可以進(jìn)行8位 16位的無符號(hào)數(shù)和帶符號(hào)數(shù)的加法運(yùn)算 源操作數(shù)和目標(biāo)操作數(shù)不能同時(shí)為存儲(chǔ)器 不能為段寄存器 指令影響標(biāo)志位的情況 OF 1 8位帶符號(hào)數(shù)相加 和超出范圍 128 127 16位帶符號(hào)數(shù)相加 和超出范圍 32768 32767 CF 1 8位無符號(hào)數(shù)相加 和超過255 16位無符號(hào)數(shù)相加 和超過65535 其他條件標(biāo)志 SF AF PF ZF 根據(jù)定義設(shè)定 例MOVAL 7EH AL 7EHMOVBL 5BH BL 5BHADDAL BL AL 7EH 5BH D9H影響標(biāo)志位的情況 SF 1 結(jié)果最高位 1ZF 0 結(jié)果不等于0AF 1 D3位向D4有進(jìn)位PF 0 1 的個(gè)數(shù)為奇數(shù)CF 0 無進(jìn)位OF 1 和超過 127 兩個(gè)正數(shù)相加 結(jié)果為負(fù) 反之亦是 2 ADC Addwithcarry 帶進(jìn)位加法指令格式 ADCdest src dest dest src CFCF 進(jìn)位標(biāo)志CF的現(xiàn)行值 上條指令CF值 特點(diǎn) 與ADD同 用途 主要用于多字節(jié)運(yùn)算中 類型舉例 ADCCX 300 寄存器 立即數(shù) CFADCAL BL 寄存器 寄存器 CFADCDX COUNT SI 寄存器 存儲(chǔ)器 CFADCBLOCK DI BX 存儲(chǔ)器 寄存器 CFADCBYTEPTRMEM 6 存儲(chǔ)器 立即數(shù) CF 用途舉例 計(jì)算兩個(gè)多字節(jié)數(shù)相加3B74AC60F8H 20D59E36C1H 兩個(gè)多字節(jié)數(shù)存放在 DATA1 DATA2的開始單元 流程圖 多字節(jié)數(shù)內(nèi)存存放 程序 MOVCX 5MOVSI 0 清SICLC 清CFLOOPER MOVAL SI DATA2 ADC SI DATA1 ALINCSI SI 1 SI DECCX CX 1 CX JNZLOOPER CX 0轉(zhuǎn)HLT 停機(jī) 3 XADD ExchangeAdd 字節(jié)交換加法指令格式 XADDdest src B W DW dest dest src dest 寄存器 存儲(chǔ)器 不能是段寄存器 功能 將目的操作數(shù)送源操作數(shù) 相加的結(jié)果送目的操作數(shù)注 XADD指令的源操作數(shù)必須為寄存器 目的操作數(shù)可為寄存器或存儲(chǔ)器XADDAX BXXADD 1000H EAX標(biāo)志位影響情況 影響SF ZF AF PF OF 不影響CF 4 INC Incrementby1 加1指令格式 INCdest B W DW dest dest 1dest 寄存器 存儲(chǔ)器 不能是段寄存器 功能 對(duì)指定的目標(biāo)操作數(shù) 1 操作數(shù)單元 用途 用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù) 標(biāo)志位影響情況 影響SF ZF AF PF OF 不影響CF 操作數(shù)類型 可以是寄存器 存儲(chǔ)器 不能是段寄存器 例 INCDL 8位寄存器 1INCSI 16位寄存器 1INCBYTEPTR BX SI 存儲(chǔ)器 1 字節(jié)操作 INCWORDPTR DI 存儲(chǔ)器 1 字操作 INCDS 錯(cuò) 二 減法指令 Subtraction 1 SUB Subtraction 減法指令2 SBB Subtractionwithborrow 帶進(jìn)位減法指令3 DEC Decrementby1 減1指令4 NEG Negate 求補(bǔ)指令5 CMP Compare 比較指令6 CMPXCHG Compare Exchange 7 CMPXCHG8B Compare Exchange8byte 1 SUB Subtraction 減法指令格式 SUBdest src dest dest src Src 立即數(shù) 寄存器 存儲(chǔ)器 Dest 寄存器 存儲(chǔ)器 例 SUBAL 37H 寄存器 立即數(shù)SUBEBX EDX 寄存器 寄存器SUBCX VAR1 寄存器 存儲(chǔ)器SUBARRAY SI AX 存儲(chǔ)器 寄存器SUBWORDPTRALPHA BX DI 512H 存儲(chǔ)器減立即數(shù)這種指令影響標(biāo)志位 AF CF OF PF SF ZF標(biāo)志 2 SBB Subtractionwithborrow 帶進(jìn)位減法指令格式 SBBdest src dest dest src CFCF 進(jìn)位標(biāo)志CF的現(xiàn)行值 上條指令CF值 Src 立即數(shù) 寄存器 存儲(chǔ)器 dest 寄存器 存儲(chǔ)器 指令影響標(biāo)志位 B W數(shù)運(yùn)算情況同SBB用途 用于多字節(jié)數(shù)相減例 SBBBX 100H 寄存器 立即數(shù) CFSBBECX EDX 寄存器 寄存器 CFSBBAL SI DATA1 寄存器 存儲(chǔ)器 CFSBB BP DISP BL 存儲(chǔ)器 寄存器 CFSBBBYTEPTR SI 6 96H 存儲(chǔ)器 立即數(shù) CF 多字節(jié)數(shù)的加減綜合舉例例 x y z均為32位數(shù) 分別存放在地址為X X 2 Y Y 2 Z Z 2的存儲(chǔ)單元中 用指令序列實(shí)現(xiàn)w x y 24 z 結(jié)果放在W W 2單元中 MOVAX XMOVDX X 2ADDAX YADCDX Y 2 x yADDAX 24ADCDX 0 x y 24SUBAX ZSBBDX Z 2 x y 24 zMOVW AXMOVW 2 DX 結(jié)果存入W W 2單元說明 低16位加減用不帶進(jìn)位的指令 高16位的加減用帶進(jìn)位的指令 3 DEC Decrementby1 減1指令格式 DECdest B W DW dest dest 1dest 寄存器 存儲(chǔ)器 不能是段寄存器 功能 對(duì)指定的目標(biāo)操作數(shù) 1 操作數(shù)單元 用途 用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù) 標(biāo)志位影響情況 影響SF ZF AF PF OF 不影響CF DEC用途舉例 MOVCX 0FFFFHCYC DECCXJNZCYCHLT 用于延時(shí)時(shí)間 4 NEG Negate 求補(bǔ)指令格式 NEGdest B W DW dest 0 dest dest 寄存器 存儲(chǔ)器 操作 把操作數(shù)按位求反后末位 1 dest 0FFFFH dest 1影響標(biāo)志 AF CF OF PF SF ZF CF 操作數(shù)為0時(shí)求補(bǔ) CF 0 一般使CF 1 OF 對(duì) 128或 32768求補(bǔ) OF 1 否則OF 0 應(yīng)用舉例 求絕對(duì)值在內(nèi)存中 從AREA1開始存放100個(gè)帶符號(hào)數(shù) 求各數(shù)的絕對(duì)值 并存于AREA2開始的單元 流程圖 程序 LEASI AREA1LEADI AREA2MOVCX 100CHECK MOVAL SI ORAL AL AL 內(nèi)容不變 置標(biāo)志JNSNEXT SF 0轉(zhuǎn)NEXTNEGAL 負(fù)數(shù) 求其正數(shù)的補(bǔ)碼NEXT MOV DI AL 送目標(biāo)INCSIINCDIDECCXJNZCHECKHLT 5 CMP Compare 比較指令格式 CMPdest src B W dest src 結(jié)果不送 但影響標(biāo)志位 影響標(biāo)志 AF CF OF PF SF ZF src 立即數(shù) 寄存器 存儲(chǔ)器 dest 寄存器 存儲(chǔ)器 例 CMPAL 0AH 寄存器與立即數(shù)比較CMPECX EDI 寄存器與寄存器比較CMPAX AREA1 寄存器與存儲(chǔ)器比較CMP BX 5 ESI 存儲(chǔ)器與寄存器比較CMPWORDPTRGAMMA 100H 存儲(chǔ)器與立即數(shù)比較 用途 用比較指令來比較兩個(gè)數(shù)之間的關(guān)系 兩者是否相等 兩個(gè)數(shù)中哪個(gè)大 1 根據(jù)ZF標(biāo)志 判斷兩者是否相等 2 根據(jù)CF標(biāo)志 判斷兩個(gè)無符號(hào)數(shù)的大小 3 用SF OF標(biāo)志 判斷二個(gè)帶符號(hào)數(shù)的大小 1 根據(jù)ZF標(biāo)志 可判斷兩者是否相等例 CMPAX BXZF 1 結(jié)果為0 兩者相等ZF 0 結(jié)果不為0 兩者不相等 2 根據(jù)CF標(biāo)志 判斷兩個(gè)無符號(hào)數(shù)的大小例 比較AX BX寄存器 將大數(shù) AX CMPAX BXJNCNEXT CF 0轉(zhuǎn)NEXTXCHGAX BXNEXT 結(jié)論 CF 0 AX BX CF 1 AX BX 設(shè) 被比較二個(gè)帶符號(hào)數(shù)分別為 A B分四種情況討論 A 0 B 0 A0 B0 3 用SF OF標(biāo)志 判斷二個(gè)帶符號(hào)數(shù)的大小 四種情況討論 操作數(shù)以8位為例 分析以上四種情況得出如下結(jié)論 OF 0時(shí) SF 0 則 A BSF OF 0SF 1 則 ABSF OF 0SF 0 則 ABSF OF 1 則A B 帶符號(hào)數(shù)找最大值若自BLOCK開始的內(nèi)存緩沖區(qū)中 有100個(gè)帶符號(hào)數(shù) 找出最大值 并存放到MAX單元中 CMP指令應(yīng)用舉例 比較指令在使用時(shí) 一般在其后緊跟一條條件轉(zhuǎn)移指令 根據(jù)比較結(jié)果決定轉(zhuǎn)向 思路 第一個(gè)數(shù)取出 AX 取出第二個(gè)數(shù) 第二個(gè)字單元內(nèi)容 與 AX 比較 AX 第二個(gè)數(shù) 不做交換 否則 第二個(gè)字單元內(nèi)容 AX 再取第三個(gè)數(shù) 經(jīng)過99次比較 在 AX 中得到最大數(shù) 編程 MOVBX OFFSETBLOCKMOVAX BX INCBXINCBXMOVCX 99AGAIN CMPAX BX JGNEXT 如ZF 0且SF OF 則轉(zhuǎn)NEXTMOVAX BX NEXT INCBXINCBXDECCXJNEAGAINMOVMAX AX MAX單元存放最大值 小結(jié) 根據(jù)標(biāo)志位來判斷比較的結(jié)果 1 根據(jù)ZF判斷兩個(gè)數(shù)是否相等 若ZF 1 則兩數(shù)相等 2 若兩個(gè)數(shù)不相等 則分兩種情況考慮 比較的是兩個(gè)無符號(hào)數(shù)若CF 0 則被減數(shù) 減數(shù) 若CF 1 則被減數(shù) 減數(shù) 比較的是兩個(gè)有符號(hào)數(shù)若OF SF 0 則被減數(shù) 減數(shù) 若OF SF 1 則被減數(shù) 減數(shù) 6 比較并交換CMPXCHG Compare Exchange 指令 格式 CMPdest src B W DW dest src 影響標(biāo)志 ZF 功能 將目的操作數(shù)和累加器中的數(shù)相比較ZF 1 源操作數(shù)送目的操作數(shù) ZF 0 目的操作數(shù)送累加器 例 CMPXCHG 1000H BL 7 比較并交換CMPXCHG8B Compare Exchange8B 指令 格式 CMPXCHG8Bdest 功能 將EDX EAX中的8個(gè)字節(jié)與存儲(chǔ)器中的8個(gè)字節(jié)比較 如相等 則ZF 1 并將ECX EBX中的8個(gè)字節(jié)數(shù)據(jù)送目的操作數(shù)處 ZF 0 將目的操作數(shù)送EDX EAX 例 CMPXCHG 1000H BL 進(jìn)行乘法時(shí) 8位 8位 16位乘積16位 16位 32位乘積 1 無符號(hào)數(shù)的乘法指令MUL MEM REG 格式 MULsrc操作 字節(jié)操作數(shù) AX AL src 字操作數(shù) DX AX AX src 雙字操作數(shù) EDX EAX EAX src 注意 一個(gè)操作數(shù)隱含在AL或AX或EAX中指令例子 MULBL AL BL 乘積在AX中MULCX AX CX 乘積在DX AX中MULDWORDPTR BX 三 乘法指令MUL IMUL Multiplication 格式與MUL指令類似 只是要求兩操作數(shù)均為有符號(hào)數(shù) 指令例子 IMULBL AX AL BL IMULWORDPTR SI DX AX AX SI 1 SI 2 有符號(hào)數(shù)乘法指令I(lǐng)MUL 注意 MUL IMUL指令中 AL AX 為隱含的乘數(shù)寄存器 AX DX AX 為隱含的乘積寄存器 除CF和OF外 對(duì)其它標(biāo)志位無定義 四 除法指令DIV IDIV Division 進(jìn)行除法時(shí) 16位 8位 8位商32位 16位 16位商64位 32位 32位商對(duì)被除數(shù) 商及余數(shù)存放有如下規(guī)定 被除數(shù)商余數(shù)字節(jié)除法AXALAH字除法DX AXAXDX雙字除法EDX EAXEAXEDX 格式 DIVsrc操作 字節(jié)操作 AL AX SRC 的商 AH AX SRC 的余數(shù)字操作 AX DX AX SRC 的商 DX DX AX SRC 的余數(shù)指令例子 DIVCLDIVWORDPTR BX 注 若除數(shù)為零或AL中商大于FFH 或AX中商大于FFFFH 則CPU產(chǎn)生一個(gè)類型0的內(nèi)部中斷 1 無符號(hào)數(shù)除法指令DIV 2 有符號(hào)數(shù)除法指令I(lǐng)DIV 格式 IDIVsrc操作與DIV類似 商及余數(shù)均為有符號(hào)數(shù) 且余數(shù)符號(hào)總是與被除數(shù)符號(hào)相同 注意 對(duì)于DIV IDIV指令A(yù)X DX AX 為隱含的被除數(shù)寄存器 AL AX 為隱含的商寄存器 AH DX 為隱含的余數(shù)寄存器 src不能為立即數(shù) 對(duì)所有條件標(biāo)志位均無定義 除法運(yùn)算要求被除數(shù)字長是除數(shù)字長的兩倍 若不滿足則需對(duì)被除數(shù)進(jìn)行擴(kuò)展 否則產(chǎn)生錯(cuò)誤 對(duì)于無符號(hào)數(shù)除法擴(kuò)展 只需將AH或DX清零即可 對(duì)有符號(hào)數(shù)而言 則是符號(hào)位的擴(kuò)展 可使用符號(hào)擴(kuò)展指令CBW CWD CWDE CDQ 關(guān)于除法操作中的字長擴(kuò)展問題 例 寫出34H 25H的程序段 MOVAL 34HMOVBL 25HCBW AL的符號(hào)擴(kuò)展到AHIDIVBL 0034H 25H 結(jié)果為 AH 0FH AL 01H 五 BCD碼運(yùn)算的十進(jìn)制調(diào)整指令 專用于對(duì)BCD碼運(yùn)算的結(jié)果進(jìn)行調(diào)整包括 DAA AAA DAS AAS AAM AAD均為隱含尋址 隱含的操作數(shù)為AL和AH為何要對(duì)BCD碼的運(yùn)算結(jié)果進(jìn)行調(diào)整 BCD碼本質(zhì)上是十進(jìn)制數(shù) 即應(yīng)遵循逢十進(jìn)一的規(guī)則 而計(jì)算機(jī)是按二進(jìn)制 十六進(jìn)制 進(jìn)行運(yùn)算 并未按十進(jìn)制規(guī)則進(jìn)行運(yùn)算 調(diào)整原理 先看一個(gè)例子例1 000010008 00000101 50000110113結(jié)果為0DH 而在BCD碼中 只允許0 9這10個(gè)數(shù)字出現(xiàn) 0DH不代表任何BCD碼 為什么會(huì)出現(xiàn)這種情況呢 原因在于BCD碼是逢十進(jìn)一 但計(jì)算機(jī)是逢十六進(jìn)一 因此 應(yīng)在個(gè)位補(bǔ)上6 促其產(chǎn)生進(jìn)位 對(duì)上例的結(jié)果進(jìn)行加6調(diào)整 00001101 0000011000010011 13 例2000010008 00001001 900010001 1117原因在于計(jì)算機(jī)在運(yùn)算過程中 如遇到低4位往高4位產(chǎn)生進(jìn)位時(shí) 此時(shí)AF 1 是按逢十六進(jìn)一的規(guī)則 但BCD碼要求逢十進(jìn)一 因此只要產(chǎn)生進(jìn)位 個(gè)位就會(huì)暗中丟失一個(gè)6 這就要進(jìn)行加6調(diào)正 對(duì)上例的結(jié)果進(jìn)行加6調(diào)整 00010001 0000011000010111 17 總的調(diào)整原理是 凡遇到某4位二進(jìn)制碼對(duì)應(yīng)的BCD碼大于9時(shí) 則加六進(jìn)行調(diào)整 凡是低4位往高4位產(chǎn)生了進(jìn)位時(shí) 則加6進(jìn)行調(diào)整 1 壓縮BCD碼加法調(diào)整DAA 指令操作 調(diào)整方法 若AL的低4位 9 AF 1則 AL AL 6 AF 1若AL的高4位 9 CF 1則 AL AL 60H CF 1除OF外 DAA指令影響所有其它標(biāo)志 DAA指令應(yīng)緊跟在ADD或ADC指令之后 1 加法的十進(jìn)制調(diào)整指令 兩個(gè)壓縮BCD碼相加結(jié)果在AL中 通過DAA調(diào)整得到一個(gè)正確的壓縮BCD碼 例4 0100100048HMOVAL 48H 0111010074HMOVBL 74H10111100BCHADDAL BL 0110011066HDAA100100010122H 進(jìn)位 進(jìn)位 執(zhí)行ADD后 AL BCH 高4位低4位均大于9 故DAA指令執(zhí)行加66H調(diào)整 最后結(jié)果為 AL 22H CF 1 AF 1 本指令對(duì)在AL中的由兩個(gè)未組合的BCD碼相加后的結(jié)果進(jìn)行調(diào)整 得到一個(gè)正確的未組合的BCD碼 AAA指令只影響AF和CF 其余標(biāo)志無定義 AAA指令應(yīng)緊跟在ADD或ADC指令之后 AAA指令的操作如下 如果AL的低4位 9 AF 1 則 AL AL 6 AH AH 1 AF 1 AL AL 0FH CF AF否則AL AL 0FH 2 非壓縮BCD碼加法調(diào)整AAA 假定二數(shù)在內(nèi)存中均是低位在前 高位在后 另留出5個(gè)單元存放相加的結(jié)果 內(nèi)存中數(shù)據(jù)存放形式見下頁圖 例3 有兩個(gè)多位十進(jìn)制數(shù)2658和3619 以非壓縮的BCD碼形式存放在內(nèi)存中 求二者之和 即2658 3619 06H 02H 09H 01H STRING1 STRING2 08H 05H 06H 03H 被加數(shù) 加數(shù) 數(shù)據(jù)段 8 5 6 2 9 1 6 3 SUM 結(jié)果 程序段為 LEASI STRING1 STRING1偏移地址送SILEADI STRING2 STRING2偏移地址送DILEABX SUM SUM偏移地址送BXMOVCX 4 循環(huán)4次CLC 清進(jìn)位標(biāo)志AGAIN MOVAL SI ADCAL DI 帶進(jìn)位加AAA 未壓縮BCD碼調(diào)正MOV BX AL 結(jié)果存入SUMINCSI 調(diào)整指針I(yè)NCDIINCBXDECCX 循環(huán)計(jì)數(shù)器減1JNZAGAIN 若未處理完 則轉(zhuǎn)AGAIN 1 壓縮BCD碼減法的十進(jìn)制調(diào)正指令DAS對(duì)AL中由兩個(gè)壓縮BCD碼相減的結(jié)果進(jìn)行調(diào)整 調(diào)整操作為 若AL的低4位 9 AF 1 則 AL AL 6 且AF 1若AL的高4位 9 CF 1 則 AL AL 60H 且CF 1DAS對(duì)OF無定義 但影響其余標(biāo)志位 DAS指令要求跟在減法指令之后 2 減法的十進(jìn)制調(diào)整指令 2 非壓縮BCD碼減法的十進(jìn)制調(diào)正指令A(yù)AS對(duì)AL中由兩個(gè)非壓縮的BCD碼相減的結(jié)果進(jìn)行調(diào)整 調(diào)整操作為 若AL的低4位 9或AF 1 則 AL AL 6 AH AH 1 AF 1 AL AL 0FH CF AF否則 AL AL 0FH 3 乘法的十進(jìn)制調(diào)正指令A(yù)AM對(duì)AX中由兩個(gè)非壓縮BCD碼相乘的結(jié)果進(jìn)行調(diào)整 隱含的操作寄存器為AL和AH AAM跟在MUL指令之后使用 影響標(biāo)志位PF SF ZF 其它無定義 例5 按十進(jìn)制乘法計(jì)算7 8 程序段如下 MOVAL 07H AL 07HMOVCL 08H CL 08HMULCL AX 0038HAAM AH 05H AL 06H所得結(jié)果為非壓縮的BCD碼 4 除法的十進(jìn)制調(diào)正指令A(yù)AD 對(duì)非壓縮BCD除法運(yùn)算進(jìn)行調(diào)整 調(diào)整操作為 先對(duì)被除數(shù)和除數(shù)進(jìn)行調(diào)整 再運(yùn)算 AL AH 0AH AL AH 0隱含的操作寄存器為AH AL AAD要在DIV指令之前使用 影響標(biāo)志位PF SF ZF 其它無定義 例6 按十進(jìn)制乘法計(jì)算55 7 程序段如下 MOVAX 0505H AX 55BCDMOVCL 07H CL 7AAD AX 0037HDIVCL AH 6 AL 7所得結(jié)果為非壓縮的BCD碼 商7余6