2017-01-30 73 views
1

我正在处理程序集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 
+2

'MUL bl' - >导致'ax'。请[阅读指令参考](http://x86.renejeschke.de/html/file_module_x86_id_210.html)。 –

+0

您的问题描述似乎也是一个问题。如果你是“把一个字乘以一个字节”,你通常至少需要一个字来存储结果。因此,乘以一个字节会产生一个字,乘以一个字会产生一个双字。 –

回答

1

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

  • 清除寄存器采用xor reg, reg
  • 你可以直接从内存中繁殖,不需要额外的寄存器做得最好

这样的:

xor ax, ax 
mov al, D2 
mul D1   <-- DX:AX = AX * D1 
mov REPLY, ax 
mov REPLY+2, dx 
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

OOOOPPPSSSS,这是一个愚蠢的错误,THNKS ... –