簡體   English   中英

計算偏移量(Motorola 68k)

[英]Calculating Offset (Motorola 68k)

我有一個問題來查找這樣的偏移量:

假定指令BNE HERE在存儲器位置$ FF1234中,標簽HERE表示地址$ FF12C0中的指令。 計算該指令的偏移量(位移)。 偏移量將由典型的匯編器存儲為8位或16位值嗎? 為什么?

我嘗試這樣做來查找位移:

FF1234 + offset = HERE = FF12C0
I tried solving for Offset which is:

 FF1234
-FF12C0

等於:33432820?

這是計算偏移量的正確方法嗎?

首先:檢查BNE指令如何使用偏移量,以及如果進行了跳轉,則使用哪個PC值來計算下一個PC值。

來自http://68k.hax.com/Bcc

說明:如果指定的條件為true,則程序將在位置(PC)+位移處繼續執行。 PC包含密件抄送指令的指令字地址加兩個。 位移是一個二進制補碼整數,表示從當前PC到16位位移(緊隨指令之后的字)的相對距離(以字節為單位)。 如果指令字中的8位位移字段全為($ FF),則使用32位位移(緊隨指令之后的長字)。

因此,如果BNE指令位於$FF1234 ,則用作要添加偏移量基礎的PC的值為$FF1236

OTOH,PC目標值為$FF12C0 ,因此$FF1236 + offset = $FF12C0 offset將為正值。 弄清楚它應該沒有問題。

關於另一個問題:

偏移量將由典型的匯編器存儲為8位或16位值嗎? 為什么?

我不知道這意味着“典型的匯編程序”。 我不知道它是針對任何架構的典型匯編程序,還是針對m68k架構的典型匯編程序。 我只能猜測這是指“生成m68k目標代碼的典型匯編程序”,在這種情況下,您應該能夠僅通過查看偏移值和BNE的編碼選項所需的位大小來回答問題。說明,可在上述網頁中找到:

指令格式:\\ i3-++-4條件,88位位移,

如果8位位移= $ 00,則為016位位移

如果8位位移= $ FF,則為032位位移

指令字段(寄存器移位):條件字段-表中所列條件之一的二進制代碼。 8位位移字段-二進制補碼整數,指定滿足條件的分支指令和要執行的下一條指令之間的字節數。 16位位移字段-當8位位移字段包含$ 00時用於位移。 32位位移字段-當8位位移字段包含$ FF時用於位移。

注意:緊隨其后的指令的分支會自動使用16位位移格式,因為8位位移字段包含$ 00(零偏移量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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