use*_*056 2 assembly masm masm32
我正在8086中编写这个汇编程序,但它不能正常工作。即使我使用单位数字,商和余数也会打印为一些随机符号。有人可以指出程序中的错误吗?谢谢。
.model small
.stack 50h
.data
Divisor db ?
Dividend db ?
Quotient db ?
Remainder db ?
.code
main_method proc
mov ax, @data
mov ds, ax
mov ah, 01
int 21h
sub al, 48
mov Divisor, al
mov ah, 01
int 21h
sub al, 48
mov Dividend, al
mov bl, 00
mov al, 00
mov bl, Divisor
mov al, Dividend
div bl
mov Quotient, al
mov Remainder, ah
mov dl, Quotient
add dl, 48
mov ah, 02
int 21h
mov dl, Remainder
add dl, 48
mov ah, 02
int 21h
mov ah, 4ch
int 21h
main_method endp
end main_method
Run Code Online (Sandbox Code Playgroud)
DIV BL将 16 位值除以AX,因此您应该清除那些不使用的BL位(在本例中为整个高字节)。AX因此DIV,在 之前添加:
MOV AH,0
Run Code Online (Sandbox Code Playgroud)
或者
XOR AH,AH ; XORing something with itself clears all bits
Run Code Online (Sandbox Code Playgroud)
或者,如果您的目标是 80386 或更高版本,您可以替换Mov Al, Dividend为MOVZX AX, BYTE PTR Dividend