我在程序集8086中将字与字相乘得到了错误的答案

时间:2017-01-30 10:04:49

标签: assembly x86-16 emu8086

我正在组装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

2 个答案:

答案 0 :(得分:1)

您必须乘以BX

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

答案 1 :(得分:1)

作为Jose的答案的替代方案并显示

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

这样:

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