Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 计算偏移量(摩托罗拉68k)_Assembly_68000 - Fatal编程技术网

Assembly 计算偏移量(摩托罗拉68k)

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指令如何使用偏移量

我有一个问题要找到这样的偏移量:

假设此处的指令BNE位于内存位置$FF1234中,此处的标签表示地址$FF12C0处的指令。计算此指令的偏移量(位移)。典型的汇编程序会将偏移量存储为8位还是16位值?为什么?

我试着这样做以找到位移:

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位。