2016-11-10 2 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 (коды push и pop требуют один регистр) так, если у вас есть ассемблер достаточно умен, чтобы разбить его на отдельные инструкции, вы должны сделать это сами:

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

Смежные вопросы