2017-09-20 89 views
0

这是家庭作业,所以我宁愿被推向正确的方向,而不是用勺子喂饱答案。将汇编指令转换为十六进制格式?

任务:给二进制和十六进制编码以下说明

SBC R0, R12, R6 

使用来自教授的一些指令,我已经能够打破一些下来到什么,我认为是正确的二进制格式:

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

这里是我的问题:
1)当S标志1而非0 ?我怎样才能知道该标志是否应该是10只是基于给定的汇编代码?

2)您如何确定,只给出汇编代码,无论是I型还是R型?

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

编辑:该处理器是ARM​​v7的

+0

这是什么类型的处理器? – harold

+0

应该是ARM7,编辑该问题以包含它 – Mdomin45

+0

请查看此[pdf]的第10页(http://vision.gel.ulaval.ca/~jflalonde/cours/1001/h17/docs/arm-instructionset .pdf):) –

回答

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;如果使用寄存器,最低位为1。
由于r6是第二个操作数,所以这三个位全部为零。

位24 - 21
这是操作码,0110 sbc

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

位19 - 16
这是第一操作数寄存器Rn中,它是r12因此该字段值1100

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

位11 - 0
此字段解释为基于第25位(位)的值。
当I = 0时,该字段是

位11 - 4
移位量。
由于没有移位在汇编指令指定的,这些位都为0。

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


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