我在汇编 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
我正在处理 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