我知道ARM有很多寄存器,我想知道寄存器(r0-r15,cpsr等)到它们的二进制表示之间的映射是什么用于最终二进制(基本上是什么值进入指令中的Rn和Rd字段)。例如,r0
是0b0000
而r1
只是0b0001
吗?如果是这样,在特定CPU模式下它是什么。或者CPU模式是否不影响寄存器的标识符(我觉得它应该是不同的代码)。
感谢。
答案 0 :(得分:1)
从infocenter.arm.com获取ARM体系结构参考手册。你想知道的一切就在那里。
指令将r0 = 4' b0000和r1 4' b0001等编码为r15 = 4' b1111。有些寄存器基于模式,管理程序模式,用户模式中断模式等存储,指令中的编码不会改变r13在编码中是13,但处理器中的某处是if-then-else的某种风格得到真正的登记册。我们看不到那些埋藏在他们逻辑中的东西。
对于大多数指令,拇指指令通常限于r0-r7,有一些专门用于移入/移出较高编号的寄存器r8-r15,但编码相同r0 = 0 r1 = 1 ,r2 = 2等等。
对于许多指令集,您可以自己解决这个问题,尝试类似
add r0,r0,r1
add r0,r0,r2
add r0,r0,r3
add r0,r0,r4
...
add r0,r1,r0
add r0,r2,r0
add r0,r3,r0
...
然后看看在组装之后哪些位发生了变化然后反汇编...
答案 1 :(得分:0)
Here是一个链接,可以将您带到ARM网页,并允许您下载ARM ARM。简短的回答是它因架构(V4-7),指令和指令类型(THUMB,ARM,THUMB2,64位等)而异。