我是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的最後內容?
我是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的最後內容?
AAM (BCD ADJUST AFTER MULTIPLY)
使用AAM只有兩個BCD數字之間執行MUL指令後 (解壓縮)。 mul將結果存儲在AX寄存器中。結果是 小於100,因此它可以包含在AL寄存器中(AX寄存器的低字節 )。 aam通過將AL除以10來打開AL結果, 將商(最高有效位數)存儲在AH中,並將餘數(最低有效位數)存儲在AL中。
所以問題是如果我們提供大於99
的值嗎?
它會做同樣的AH = AL/10
和AL = AL mod 10
,但會留下不正確的解壓縮的bcd值。
所以來到你的情況 AAM
AL
之前將166 (0xA6)
(AX
將0x04A6
後乘) 後AAM
Ah= 166/10=16 (0x10)
AL=166 mod 10=6 (0x6)
正如我們所看到AX
後AAM
將0x1006
它留下不正確unpacked bcd number
。因爲輸入是不低於100
ASCII調整後乘法(AAM):
校正2個BCD 值的乘法運算的結果。
算法:
AH = AL/10
AL =剩餘
例:
MOV AL,15; // AL = 0Fh時
AAM; // AH = 01,AL = 05
RET
只需使用一個調試器和嘗試。我得到了77 * 0A和空空導彈,這不是一個有效的BCD結果AX = 01d06h。 – rcgldr