如何在 Assembly 中执行整数除法?非法覆盖寄存器错误
How to perform an integer division in Assembly? Illegal override register error
到目前为止,我已经想出了如何从输入中获取整数以及如何输出它们的方法。如果我可以执行整数除法,那就太酷了。任何人都可以给我一个关于它基本上是如何完成的提示吗?为什么会出现此错误?
代码如下:
.MODEL SMALL
.STACK 200h
.DATA
InAMess DB 'Enter A:',0ah,'$'
InBMess DB 'Enter B:',0ah,'$'
Res DB 'Result of two integer division:$'
a dw 0
b dw 0
.CODE
start:
mov ax, @Data
mov ds, ax
jmp action
inputNumber proc
nextchar:
mov ah, 01h
int 21h
cmp al, 2fh
jl outp
sub al, 30h
xor ah, ah
xchg ax, bx
mov dx, 0Ah
mul dx
add bx, ax
jmp nextchar
outp:
ret
inputNumber endp
OutputNumber proc
aam
add ax, 3030h
mov dl, ah
mov dh, al
mov ah, 02
int 21h
mov dl, dh
int 21h
ret
OutputNumber endp
action:
mov ah, 9h
mov dx, OFFSET InAMess
int 21h
call InputNumber
mov a, bx
mov bx, 0
mov ah, 9h
mov dx, OFFSET InBMess
int 21h
call InputNumber
mov b, bx
mov bx, 0
mov ah, 9h
mov dx, OFFSET Res
int 21h
;Here it is
mov dx,0
mov dx:ax, a
div b
mov ax, a
call OutputNumber
mov ah, 4ch
mov al, 0
int 21h
END start
错误:
mov dx:ax, a
无效。 dx:ax
符号只是意味着你应该将高位字放入 dx
中,将低位字放入 ax
中。由于您的 a
是一个单词,并且没有符号,您可以将其放入 ax
和零 dx
(您已经完成了)。所以:
mov dx, 0
mov ax, a
div b
到目前为止,我已经想出了如何从输入中获取整数以及如何输出它们的方法。如果我可以执行整数除法,那就太酷了。任何人都可以给我一个关于它基本上是如何完成的提示吗?为什么会出现此错误?
代码如下:
.MODEL SMALL
.STACK 200h
.DATA
InAMess DB 'Enter A:',0ah,'$'
InBMess DB 'Enter B:',0ah,'$'
Res DB 'Result of two integer division:$'
a dw 0
b dw 0
.CODE
start:
mov ax, @Data
mov ds, ax
jmp action
inputNumber proc
nextchar:
mov ah, 01h
int 21h
cmp al, 2fh
jl outp
sub al, 30h
xor ah, ah
xchg ax, bx
mov dx, 0Ah
mul dx
add bx, ax
jmp nextchar
outp:
ret
inputNumber endp
OutputNumber proc
aam
add ax, 3030h
mov dl, ah
mov dh, al
mov ah, 02
int 21h
mov dl, dh
int 21h
ret
OutputNumber endp
action:
mov ah, 9h
mov dx, OFFSET InAMess
int 21h
call InputNumber
mov a, bx
mov bx, 0
mov ah, 9h
mov dx, OFFSET InBMess
int 21h
call InputNumber
mov b, bx
mov bx, 0
mov ah, 9h
mov dx, OFFSET Res
int 21h
;Here it is
mov dx,0
mov dx:ax, a
div b
mov ax, a
call OutputNumber
mov ah, 4ch
mov al, 0
int 21h
END start
错误:
mov dx:ax, a
无效。 dx:ax
符号只是意味着你应该将高位字放入 dx
中,将低位字放入 ax
中。由于您的 a
是一个单词,并且没有符号,您可以将其放入 ax
和零 dx
(您已经完成了)。所以:
mov dx, 0
mov ax, a
div b