将汇编指令转换为十六进制格式?
这是家庭作业,所以我宁愿被推向正确的方向,而不是用勺子喂饱答案。将汇编指令转换为十六进制格式?
任务:给二进制和十六进制编码以下说明
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
字段不变?
编辑:该处理器是ARMv7的
使用该PDF作为参考,人们发现的格式进行第4.5节
记住,对于像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是正确的值。
您需要记住每条指令使用哪种类型的格式。
有很多结构,模式出现和一般类别(如“数据处理指令”)可以定义,但最终还有一个助记符努力(例如操作码值,位字段等)
这是什么类型的处理器? – harold
应该是ARM7,编辑该问题以包含它 – Mdomin45
请查看此[pdf]的第10页(http://vision.gel.ulaval.ca/~jflalonde/cours/1001/h17/docs/arm-instructionset .pdf):) –