首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编分支机器代码时,何时使用8位、16位或32位位移?

汇编分支机器代码时,何时使用8位、16位或32位位移?
EN

Stack Overflow用户
提问于 2018-04-20 07:20:20
回答 1查看 872关注 0票数 0

我有一个问题关于机器代码的操作,如胸罩,密件抄送等…在68K汇编中。

是否有一条规则可以知道位移的大小是8位、16位还是32位?例如,我使用BRA操作编写了一个具有-6字节位移的程序,其机器代码是:

代码语言:javascript
复制
60FA  (8 bit displacement)

然后我写了一个程序,它有6个字节的位移用于胸罩操作,机器代码是:

代码语言:javascript
复制
6000 0006   (16 bit displacement)

正的位移总是16位的位移吗?

以下是手册中关于胸罩操作码的说明,这进一步让我感到困惑:

代码语言:javascript
复制
8-Bit Displacement field: Twos complement integer specifying the number of bytes
between the branch instruction and the next instruction to be executed if the
condition is met.

16-Bit Displacement field: Used for the displacement when the 8-bit displacement
field contains $00.

32-Bit Displacement field: Used for the displacement when the 8-bit displacement
field contains $FF. 

我被告知使用16位时,位移是否大于字节大小,但6是不是小于字节大小?

此外,位移是否总是像第一个示例中的"A“一样带符号扩展?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-04-25 01:52:50

汇编器主要是按照你说的做。我的68k汇编器暴露了不同的行为-一些会默默地翻译我告诉他们的东西,一些会在分支偏移量太小或太大而无法到达标签时发出警告和/或错误,还有一些会执行几次遍历来优化分支大小。这取决于您的汇编程序。

我认识的大多数汇编程序,如果你没有明确地告诉他们不这样做(使用.S或.L后缀),他们会选择字大小偏移量。

但是,即使你的汇编器为你优化了,一个好的汇编器程序员也知道他需要多大的分支大小才能到达标签。

代码语言:javascript
复制
   BRA.S    label
   BRA.W    label
   BRA.L    label ; (68020 and up only)

生成三个不同的偏移值(字节、字、长字大小)以达到其目标。偏移量是2s-补码,所以+-126. +-65534和+-2^-很多。如果你选择的分支类型使用了太多的偏移量,你就浪费了内存空间和CPU (取指令需要更长的时间)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49931639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档