1

我是这种语言的新手,并试图熟悉它。在此示例中,我收到“错误寻址”错误,但它有什么问题?

hextoasc proc near ; AX input, si point result storage address

push ax bx cx dx si di bp es
mov cx,00h
mov bx,0ah
hexloop1:

mov dx,0
div bx
add dl,'0'
push dx
inc cx
cmp ax, 0ah
jge hexloop1
add al, '0'
mov [si], al

hexloop2:

pop ax
inc si
mov [si], al
loop hexloop2
inc si
mov al, '$'
mov [si], al
pop es bp di si dx cx bx ax
ret

endp

这是我的错误:

在此处输入图像描述

4

1 回答 1

3

尽管它似乎在抱怨寻址模式,但看起来它实际上并不喜欢这条线:

push ax bx cx dx si di bp es

这实际上不是有效的 8086 操作(操作码pushpop操作码需要一个寄存器),因此,除非您有足够聪明的汇编器将其分解为单独的指令,否则您必须自己完成:

push ax
push bx
push cx
push dx
push si
push di
push bp
push es

; all your other code goes here.

pop es
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
于 2016-11-10T11:34:59.827 回答