2017-01-30 21 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

'мул 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 ... –