[英]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.