我一直在為Sega Mega Drive ROM組裝我自己的反匯編程式,基于MOTOROLA M68000 FAMILY Programmer's Reference Manual 的初步作業。在反匯編了相當大的一部分 ROM 之后,我嘗試使用VASM重新組裝這個反匯編的輸出,因為它可以接受摩托羅拉匯編語法,使用它的mot語法模塊。
現在,對于絕大多數重組,這作業得很好,但是對于具有由“程式計數器間接索引(8 位位移)模式”定義的有效地址的操作存在一個問題。鑒于我現在才學習摩托羅拉 68000 組裝,我想確認我的理解并問:這些操作的正確語法是什么?
解釋
例如,如果我有兩個詞:
4ebb 0004
我將其解釋為JSR目標目的地是以下各項的總和:
- 的內容
pc 0x04- 的內容
d0
(鑒于我將自己限制在 68000,我已經省略了擴展詞中的size和的任何考慮)。scale根據參考手冊中如何描述此尋址模式,我將其發布為:
jsr ($04,pc,d0)
用 VASM 組裝
但是,當我將此反饋到 VASM 時,它會發出以下錯誤:
error 2030 in line X of "XXXX.asm": displacement out of range
> jsr ($04,pc,d0)
d0這似乎是一個非常奇怪的錯誤,因為由于使用了暫存器,直到運行時才能知道位移。玩弄這個,它似乎使用運算元 ( $04) 的第一部分作為絕對目標目的地,并基于此計算不同的位移。
用 GNU 組裝as
If I switch to GNU as, the syntax that provides identical output to the original ROM is:
jsr %pc@(0x04,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437329.html
上一篇:如何通過BIOS中斷獲取特殊密鑰
下一篇:是什么讓呼叫約定不同?
