2014-12-09 49 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