該程式將二進制轉換為十進制,我應該將“$$”推入堆疊,以便稍后它會識別“$$”并結束程式。但是,它給了我一個錯誤,即“$$”是 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
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514011.html
上一篇:NASMidiv無法正確劃分
