我在汇编 8086 中将字乘以字节得到错误的答案

I get wrong answers in multiplying word to byte in assembly 8086

我正在处理 8086 程序集的作业,但我得到了错误的答案;谁能猜出我的问题是什么?我想将一个字乘以字节....这是我的代码:

STSEG SEGMENT

  DB 64 DUP(?)

STSEG ENDS
;--------

DTSEG SEGMENT

    D1    DW 6454H
    D2    DB 44H
    REPLY DW 2 DUP(?)

DTSEG ENDS
;--------

CDSEG SEGMENT

    MAIN PROC FAR 
        ASSUME DS:DTSEG, SS:STSEG, CS:CDSEG

        MOV AX,DTSEG
        MOV DS,AX
        MOV AX,0

        MOV AL,D2
        MOV BX,D1
        MUL BL
        MOV REPLY,AX
        MOV REPLY+2,DX

    MAIN ENDP 
    CDSEG ENDS

你必须乘以 BX :

    MOV AX,0
    MOV AL,D2
    MOV BX,D1
    MUL BX          ;◄■■ BX*AX = DX:AX.
    MOV REPLY,AX
    MOV REPLY+2,DX

作为何塞回答的替代方案并表明

  • 清除寄存器最好使用 xor reg, reg
  • 你可以直接从内存中乘法而不需要额外的寄存器

这个:

xor  ax, ax
mov  al, D2
mul  D1            <-- DX:AX = AX * D1
mov  REPLY, ax
mov  REPLY+2, dx