[英]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值。
說明:如果指定的條件為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.