如何在 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