将汇编指令转换为十六进制格式?

时间:2017-09-20 15:25:12

标签: assembly arm armv7 machine-code

这是家庭作业,所以我宁愿被推向正确的方向而不是用勺子喂答案。

任务:为以下指令提供二进制和十六进制编码

SBC R0, R12, R6

使用教授的一些指示,我已经能够将其中的一部分分解为我认为正确的二进制格式:

Cond  000  Op    S  Rn    Rd    00000000  Rm
----  ---  ----  -  ----  ----  --------  ----
1110  000  0110  0  1100  0000  00000000  0110

以下是我的问题:
1)什么时候是S标志1而不是0?如何根据给定的汇编代码判断标志应该是1还是0

2)如何仅根据给定的汇编代码确定它是I型还是R型?

3)为什么3位000和8位00000000字段不变?

编辑:处理器是ARM​​v7

1 个答案:

答案 0 :(得分:2)

使用此PDF作为参考,可以在4.5节中找到数据处理说明的格式

点击图片放大 Data processing instruction

请注意,sbc <opcode>{cond}{S} Rd,Rn,<Op2><Op2>等指示的汇编语法为Rm{,<shift>},<#expression>

比特31 - 28

这四位是预测指令的条件代码 如果指令中未指定条件代码后缀,则隐含AL(始终) AL编码为1110。

比特27 - 25

数据处理指令的前两位始终为0 如果立即数用作第二个操作数,则最低位为1;如果使用寄存器,则最低位为0 由于r6是第二个操作数,因此这三个位都为零。

比特24 - 21
这是sbc的操作码0110。

第20位
这对应于汇编语法的 S 后缀 如果设置,则指令设置标志,否则它们不变。

比特19 - 16
这是第一个操作数寄存器 Rn ,它是r12,因此该字段值为1100.

第15-12位
这是目标操作数寄存器 Rd ,它是r0,因此必须将0000用于此字段。

第11 - 0位
该字段根据位25(位 I )的值进行解释 当I = 0时,此字段为

第11 - 4位
转移金额 由于汇编指令中未指定移位,因此这些位为0.

比特3 - 0
第二个操作数寄存器 Rm ,这是r6所以0110是正确的值。

您需要记住每条指令使用的格式类型 有很多结构,模式出现,一般类别(如“数据处理指令”)可以定义,但最终还有一个助记符(例如操作码值,位字段等...)