[英]Assembly 8086 - Can't push two symbols
該程序將二進制轉換為十進制,我應該將“$$”壓入堆棧,以便稍后識別“$$”並結束程序。 但是,它給我一個錯誤,“$$”是 PUSH 的無效參數。
其他一切都適用於這個程序,我只需要以某種方式在堆棧中標記結尾而不會出錯。 我試過輸入諸如“00”之類的數字,它會創建一個無限循環而不是錯誤。 如果是這樣的話,我正在使用 emu8086。
PUSH ax
PUSH cx
PUSH dx
MOV cx, 10
PUSH "$$" ; pushes $$ to mark the end
Divide:
MOV dx, 0
DIV cx
PUSH dx
CMP ax, 0
JA Divide
MOV ah, 2
Print:
POP dx
CMP dx, "$$" ; compares if there's a mark, to end the program
JE End
ADD dl, '0'
INT 21h
JMP Print
像PUSH "$$"
這樣的指令對於基於 8086 體系結構的仿真器通常是不合法的,在這種情況下不可能推送像 "$$" 這樣的立即值。
解決方法是將值移動到寄存器並推送寄存器:
mov dx, "$$"
push dx
具體來說,在您的程序中,您可以推送 CONST 10(已經存在於 CX 中),因為沒有余數會等於該值:
MOV cx, 10
PUSH CX ; pushes 10 to mark the end
Divide:
MOV dx, 0
DIV cx
PUSH dx
CMP ax, 0
JA Divide
MOV ah, 2
Print:
POP dx
CMP dx, CX ; compares if there's a mark, to end the program
JE End
ADD dl, '0'
INT 21h
JMP Print
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.