Assembly 计算偏移量(摩托罗拉68k)
我有一个问题要找到这样的偏移量: 假设此处的指令BNE位于内存位置$FF1234中,此处的标签表示地址$FF12C0处的指令。计算此指令的偏移量(位移)。典型的汇编程序会将偏移量存储为8位还是16位值?为什么? 我试着这样做以找到位移:Assembly 计算偏移量(摩托罗拉68k),assembly,68000,Assembly,68000,我有一个问题要找到这样的偏移量: 假设此处的指令BNE位于内存位置$FF1234中,此处的标签表示地址$FF12C0处的指令。计算此指令的偏移量(位移)。典型的汇编程序会将偏移量存储为8位还是16位值?为什么? 我试着这样做以找到位移: FF1234 + offset = HERE = FF12C0 I tried solving for Offset which is: FF1234 -FF12C0 这等于:33432820 这是计算偏移量的正确方法吗?首先:检查BNE指令如何使用偏移量
FF1234 + offset = HERE = FF12C0
I tried solving for Offset which is:
FF1234
-FF12C0
这等于:33432820
这是计算偏移量的正确方法吗?首先:检查BNE指令如何使用偏移量,以及如果跳转,PC值用于计算下一个PC值 从 描述:如果指定的条件为真,则程序执行 在位置(PC)+位移处继续。电脑里有地址 Bcc指令的指令字加上2。这个 位移是一个表示相对位移的二补整数 从当前PC到16位位移的距离(字节) 使用紧跟在指令后面的单词)。如果8位 指令字中的位移字段为全1($FF),即 32位位移(紧跟在指令后面的长字)为 用过 因此,如果
BNE
指令位于$FF1234
,则用作要添加的偏移量基础的PC值为$FF1236
OTOH,PC目标值是$FF12C0
,因此$FF1236+偏移量=$FF12C0
<代码>偏移量将为正值。你应该没问题弄清楚
关于另一个问题:
偏移量是否会被存储为8位或16位值
汇编程序?为什么?
我不知道它的意思是“典型的汇编程序”。我不知道它是指任何体系结构的典型汇编程序,还是指m68k体系结构的典型汇编程序。我只能猜测这是指“生成m68k目标代码的典型汇编程序”,在这种情况下,您应该能够通过查看偏移量值所需的大小(以位为单位)和BNE指令的编码选项来回答问题,可在上述网页中找到:
指令格式:\i3-+-4条件,88位位移
016位位移,如果8位位移=00美元
032位位移,如果8位位移=$FF
指令字段(寄存器移位):条件字段——二进制
表中所列条件之一的代码。8位位移
字段--指定字节数的两个补码整数
在分支指令和要执行的下一条指令之间
如果条件满足。16位位移字段——用于
8位位移字段包含$00时的位移。32位
位移字段——当8位
置换字段包含$FF
注意:到紧接着的指令的分支自动-
自动使用16位位移格式,因为8位
位移字段包含$00(零偏移)
不,显然如果
FF1234+offset=FF12C0
那么offset=FF12C0-FF1234
。还要检查68k是使用当前指令还是下一条指令作为基础。这是有意义的,但它是8位还是16位?因为偏移量是8C
,超出了8位有符号的范围,所以它将是16位。那么8位有符号的范围是什么?如果一个值落在该范围内,那么它必须是8位?我的理解正确吗?范围是-128到+127位小数,不,在这种情况下不必是8位,因为所有这些都可以表示为16位。但是,超出该范围的任何内容都不能是8位。