2016-11-10 68 views
1

我是这种语言的新手,并试图熟悉它。在这个例子中,我得到一个“错误的地址”错误,但是它有什么问题?尝试将十六进制转换为ascii时出现“错误寻址”错误

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 

这是我的错误:

enter image description here

回答

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 
+0

太感谢你了!它现在的工作 – WorldOfEmre

+0

一些汇编程序(如FASM)支持PUSH/POP作为多操作数伪操作,因此您偶尔可能会遇到此语法的示例。 –

+0

还有PUSHA/POPA按顺序推动AX,CX,DX,BX,SP,BP,SI,DI,并以相反顺序弹出它们(因此它们被正确恢复) – Idloj

相关问题