2014-12-09 43 views
0

我想使用寄存器AX進行乘法運算。我有ax = 1000(3E8h),我想乘以10.我得到這個結果在ax,執行mul命令後:910h,這是2320(基數10)。我應該得到2710h這是10000(基數10)。程序集8086乘法錯誤的結果

這裏是我的代碼:

assume cs:code, ds:data 
data segment 
    zece db 10 
data ends 
code segment 
start: 
    mov ax, data 
    mov ds, ax 
    mov dx, 0 
    mov ax, 3E8h 
    mul zece 
    mov ax, 4C00h 
    int 21h 
code ends 
end start 

任何建議,將不勝感激。

回答

2

指令mul有幾個變種。當您乘以8位內存對象時,結果爲AL*[mem/8]。在你的情況你乘

0xE8 * 0xA = 0x910 or 
232 * 10 = 2320 

更改數據定義,以獲得期望的結果:

data segment 
    zece dw 10 
data ends 
+0

哇,謝謝!將在5分鐘內接受它。有用。 – user1812076 2014-12-09 13:06:18

+0

另請注意,在乘法之前,您不需要清除DX。 – 2014-12-14 19:33:58