簡體   English   中英

裝配體 8086 - 無法壓入兩個符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM