我不知道为什么除法会产生错误的商和余数
I don't know why the division produces a quotient and a remainder that are wrong
如何解决这个问题:我不知道为什么商和余数都不对。
我的 DOSBox 代码:
.model small
.stack 100h
.data
Dividend db 0dh,0ah,"Enter Dividend : $" ;string
Divisor db 0dh,0ah,"Enter Divisor : $"
Quotient db 0dh,0ah,"Display Quotient : $"
Remainder db 0dh,0ah,"Display Remainder : $"
.code
main proc ;main program here
mov ax,@data ;initialize ds
mov ds,ax
mov ah,09h ;Show Enter Dividend
lea dx, Dividend
int 21h
mov ah,01h ;Input Dividend
int 21h
mov bh,al
mov ah,09h ;Show Enter Divisor
lea dx, Divisor
int 21h
mov ah,01h ;Input Divisor
int 21h
mov bl,al
mov ah,00h ;Divide
mov al,bh
div bl
mov cx,ax
add cx,3030h
mov ah,09h ;Show Display Quotient
lea dx, Quotient
int 21h
mov ah,02 ;Display Quotient
mov dl,cl
int 21h
mov ah,09h ;Show Display Remainder
lea dx, Remainder
int 21h
mov ah,02 ;Display Remainder
mov dl,ch
int 21h
mov ah,4Ch ;end here
int 21h
main endp
end main
错误结果:
Enter Dividend : 7
Enter Divisor : 3
Display Quotient : 1
Display Remainder : 4
您向我们展示的奇怪结果源于程序执行除法 55 / 51 这确实会产生商 1 和余数 4。
DOS.GetCharacter函数01h用于在AL
中输入returns一个ASCII码。当您按下键盘上的 7 时,AL
寄存器将保存 ASCII 码 37h 或十进制的 55。在计算中使用此输入之前,您需要将字符转换为数字表示的值。一个简单的 sub al, 30h
就可以做到这一点。当然你也需要为第二个输入做同样的事情:
...
mov ah, 09h ;Show Enter Dividend
lea dx, Dividend
int 21h
mov ah, 01h ;Input Dividend
int 21h
sub al, 30h
mov bh, al
mov ah, 09h ;Show Enter Divisor
lea dx, Divisor
int 21h
mov ah, 01h ;Input Divisor
int 21h
sub al, 30h
mov bl, al
...
如何解决这个问题:我不知道为什么商和余数都不对。
我的 DOSBox 代码:
.model small
.stack 100h
.data
Dividend db 0dh,0ah,"Enter Dividend : $" ;string
Divisor db 0dh,0ah,"Enter Divisor : $"
Quotient db 0dh,0ah,"Display Quotient : $"
Remainder db 0dh,0ah,"Display Remainder : $"
.code
main proc ;main program here
mov ax,@data ;initialize ds
mov ds,ax
mov ah,09h ;Show Enter Dividend
lea dx, Dividend
int 21h
mov ah,01h ;Input Dividend
int 21h
mov bh,al
mov ah,09h ;Show Enter Divisor
lea dx, Divisor
int 21h
mov ah,01h ;Input Divisor
int 21h
mov bl,al
mov ah,00h ;Divide
mov al,bh
div bl
mov cx,ax
add cx,3030h
mov ah,09h ;Show Display Quotient
lea dx, Quotient
int 21h
mov ah,02 ;Display Quotient
mov dl,cl
int 21h
mov ah,09h ;Show Display Remainder
lea dx, Remainder
int 21h
mov ah,02 ;Display Remainder
mov dl,ch
int 21h
mov ah,4Ch ;end here
int 21h
main endp
end main
错误结果:
Enter Dividend : 7 Enter Divisor : 3 Display Quotient : 1 Display Remainder : 4
您向我们展示的奇怪结果源于程序执行除法 55 / 51 这确实会产生商 1 和余数 4。
DOS.GetCharacter函数01h用于在AL
中输入returns一个ASCII码。当您按下键盘上的 7 时,AL
寄存器将保存 ASCII 码 37h 或十进制的 55。在计算中使用此输入之前,您需要将字符转换为数字表示的值。一个简单的 sub al, 30h
就可以做到这一点。当然你也需要为第二个输入做同样的事情:
...
mov ah, 09h ;Show Enter Dividend
lea dx, Dividend
int 21h
mov ah, 01h ;Input Dividend
int 21h
sub al, 30h
mov bh, al
mov ah, 09h ;Show Enter Divisor
lea dx, Divisor
int 21h
mov ah, 01h ;Input Divisor
int 21h
sub al, 30h
mov bl, al
...