請教,這段代碼是否存在問題?call far ptr s 的機器碼似乎不太正常,它應該包含段地址和偏移地址,但是emu8086不正確。

assume cs:code
stack segment
db 16 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 16
mov ax, 0
call far ptr s
inc ax
s: pop ax
add ax, ax
pop bx
add ax, bx
mov ax, 4c00h
int 21h
code ends
end start
uj5u.com熱心網友回復:
是好像有些不對。這樣的 far 呼叫,應該是 9A .... 樣的指令,FF 這樣的,似乎是誤解成了間接轉移呼叫,只是編碼也不對。是不是這個工具對這個指令寫法上有特別的規定?uj5u.com熱心網友回復:
請問代碼用你的工具運行,結果怎么樣?
uj5u.com熱心網友回復:
我用 masm 匯編后看指令是正常的。uj5u.com熱心網友回復:
如果這是它生成的機器碼,那么完全匯編錯了,間接呼叫也應該是ff 1e xx xx,不過似乎emu8086不太可能有這么嚴重的BUGuj5u.com熱心網友回復:
剛才網上找了個 v4.08 在虛擬機上試了下,發現對 far 的支持確是有問題的。定義個子程 far 屬性,call 它,編譯時提示 error,讓參考 farfar_call_... 的 examples,看了提供的三個例子,都不是直接的 call,而是先把目標地址填到變數,再記憶體間接 call;直接 jmp 到子程,編譯是過了,但生產的代碼卻并不是 far 型別的,和普通的一樣,能 short 就是 short 了。
所以,這個軟體,應該只是簡單的入門性地用用,不能當真的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/284835.html
標籤:匯編語言
上一篇:python表單tkinter利用time.sleep()方法持續獲取系統時間時卡死,其他控制元件不顯示,提示系統無回應
下一篇:求極進ap8222最新韌體