【发布时间】:2013-07-15 23:41:43
【问题描述】:
我在理解如何获得正确的分支命令操作码方面遇到了一些问题。 让我们说命令:
beq .+40
beq 操作码是001400
我知道 opCode 中的最后两个字符应该包含我们需要跳转的偏移量。
在这个问题的答案中,写的是001417,但我不明白为什么,他们是如何从40 获得17 的?
需要一个简短的解释。
【问题讨论】:
-
40(八进制)是 32,17(八进制)是 15。注意存储的偏移量乘以 2,所以 15 变为 30。然后还有两个不明字节,我猜是指令测量距分支之后位置的偏移量,而汇编代码测量距分支开始位置的偏移量。
-
我认为哈罗德是对的。八进制 17 是 0b001111,偏移量在添加到 pc 之前乘以 2,因此 0b0011110 为这条指令加 2,你得到 0b0100000,即 40。许多架构在指令之后将偏移量应用于 pc(想想用于获取指令字节的 pc,在指令开始解码和执行时,pc 已指向指令后面的字节)。
标签: assembly branch opcode pdp-11