【问题标题】:Multiplication in assembly 8086 wrong result汇编中的乘法 8086 错误结果
【发布时间】:2014-12-09 12:57:06
【问题描述】:

我正在尝试使用寄存器 AX 进行乘法运算。我有 ax=1000 (3E8h),我想将它乘以 10。在执行 mul 命令后,我在 ax 中得到这个结果:910h,即 2320(以 10 为底)。我应该得到 2710h,即 10000(以 10 为底)。

这是我的代码:

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

任何建议将不胜感激。

【问题讨论】:

    标签: assembly masm x86-16 masm32 tasm


    【解决方案1】:

    指令mul 有几个变体。当您与 8 位内存对象相乘时,结果为 AL*[mem/8]。在你的情况下,你乘以

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

    更改数据定义以获得所需的结果:

    data segment
        zece dw 10
    data ends
    

    【讨论】:

    • 另请注意,在进行乘法运算之前,您不需要清除 DX。
    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多