2014-02-20 131 views
-3

我是8086的新手,需要一些幫助。 我知道AAM的基本。 ,如果我多個雙號S假設07H 09H和8086中的AAM指令

MUL AL,BL 
AAM 

這將存儲在AH的值爲06H,03H中的AL。 但假設,如果在3位十六進制的值適用AAM,假設

MOV AL,77H 
MOV BL,0AH 
MUL BL 
AAM 

會有什麼AL的最後內容?

+1

只需使用一個調試器和嘗試。我得到了77 * 0A和空空導彈,這不是一個有效的BCD結果AX = 01d06h。 – rcgldr

回答

4
AAM (BCD ADJUST AFTER MULTIPLY) 

from here

使用AAM只有兩個BCD數字之間執行MUL指令後 (解壓縮)。 mul將結果存儲在AX寄存器中。結果是 小於100,因此它可以包含在AL寄存器中(AX寄存器的低字節 )。 aam通過將AL除以10來打開AL結果, 將商(最高有效位數)存儲在AH中,並將餘數(最低有效位數)存儲在AL中。

所以問題是如果我們提供大於99的值嗎?

它會做同樣的AH = AL/10AL = AL mod 10,但會留下不正確的解壓縮的bcd值。

所以來到你的情況 AAMAL之前將166 (0xA6)AX0x04A6後乘) 後AAM

Ah= 166/10=16 (0x10) 
    AL=166 mod 10=6 (0x6) 

正如我們所看到AXAAM0x1006它留下不正確unpacked bcd number 。因爲輸入是不低於100

0

ASCII調整後乘法(AAM)

校正2個BCD 值的乘法運算的結果。

算法

AH = AL/10

AL =剩餘

MOV AL,15; // AL = 0Fh時

AAM; // AH = 01,AL = 05

RET