我知道 ARM 有很多寄存器,我想知道寄存器(r0 - r15、cpsr 等)到它们在最终二进制文件中使用的二进制表示之间的映射是什么(基本上进入 Rn 的值是什么和指令中的 Rd 字段)。例如r0
is0b0000
和r1
just0b0001
吗?如果是这样,当涉及到特定的 CPU 模式时,它是什么。还是CPU模式不影响寄存器的标识符(我感觉应该是不同的代码)。
谢谢。
从 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
...
看看你组装然后拆卸后有什么变化......
这是一个链接,可将您带到 ARM 网页并允许您下载 ARM ARM。简短的回答是,它因架构 (V4-7)、指令和指令类型(THUMB、ARM、THUMB2、64 位等)而异。