【问题标题】:What do the abbriviations (Rn, Rd, ...) in the instruction set of ARM mean?ARM指令集中的缩写(Rn, Rd, ...)是什么意思?
【发布时间】:2016-04-21 11:35:23
【问题描述】:

最近我检查了 ARM Cortex-M3 处理器的指令集。 例如:

ADD <Rd>, <Rn>, <Rm>

这些缩写的确切含义是什么? 我猜他们的意思是不同类型的地址,比如直接寻址、相对寻址等等。 但究竟是什么?

谢谢!

【问题讨论】:

  • 关键是连接点,你会看到指令的 ascii/asm 表示,然后你会看到机器代码二进制定义,这样你就可以看到哪些位在哪里。他们可以很容易地说 ra, rb, rc ......就像已经回答的那样,d 可能意味着目的地。 n 和 m?

标签: assembly arm instruction-set instructions thumb


【解决方案1】:

基础知识:

  • Rd 是目标,RnRm 是源。它们都是通用整数寄存器; FP 将使用 Sd / Sn / SmDd / Dn / Dm 用于单人或双人。
    ARM 语法将目标放在左侧,在只读源操作数之前。

有关更多信息,请参阅 Notlikethat 的答案。一些小的补充:

  • t:在this post 中,一名 ARM 员工认为“t”可能表示“转移”而不是“目标”。

    由于t 通常出现在 LDR 和 STR 等内存指令中,我理解这意味着“向/从内存传输”,例如在 ARMARMv8-fa 上:

    LDR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
    STR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
    

    t 是内存读写的源/目标。

    这在STR和LDXR指令寄存器的描述中也有进一步的建议:

    &lt;Xt&gt;是要传输的通用寄存器的64位名称,编码在“Rt”字段中。

    LDR 指令却显示“已加载”:

    &lt;Xt&gt;是要加载的通用寄存器的64位名称,编码在“Rt”字段中。

    这个术语特别有意义,因为 ARM 是 RISC-y,因此执行内存 IO 的指令相对较少,而且它们倾向于这样做(不像 x86 中常见的添加和存储到内存)。

  • t1t2:这些用于一次加载/存储两个值的内存指令,例如ARMv8 LDP/STP:

    LDP <Xt1>, <Xt2>, [<Xn|SP>], #<imm>
    STP <Xt1>, <Xt2>, [<Xn|SP>, #<imm>]!
    
  • nm 只是数学中常用的整数变量/索引名称

  • s:

    • STXR 指令存储到Xt 的内存中(类似于 STR),但它还会获得第二个返回值(写入是否成功)到Ws

      STXR <Ws>, <Xt>, [<Xn|SP>{,#0}]
      

      所以大概选择了s,因为它出现在t 之前,就像m 出现在n 之前一样。

    • 一些 ARMv7/aarch32 指令可以在寄存器中进行移位,Rs 是该寄存器的名称,例如:

      ORR{<c>}{<q>} {<Rd>,} <Rn>, <Rm>, <shift> <Rs> 
      

      我很难找到 aarch64 的。

  • 如果它被记录在案,“关于 A64 指令描述的 C2 章”可能是一个很好的信息位置,但它不在那里

【讨论】:

    【解决方案2】:

    &lt;Rx&gt; 形式的操作数指的是通用寄存器,即r0-r15(或可接受的别名,如sppc 等)。

    我不确定它是否曾在任何地方专门调用,但有一个通用模式,“d”表示目标,“t”表示目标,“n”表示第一个操作数或基址寄存器,“m”表示第二个操作数,有时“a”表示累加器。因此,您可能会发现 &lt;Rdn&gt;(在破坏性双操作数指令中)或 &lt;Rt&gt;, &lt;Rt2&gt;(其中 64 位值保存在一对 GP 寄存器中)之类的名称。这在其他类型的寄存器中也是一致的,例如VADD.F32 &lt;Sd&gt;, &lt;Sn&gt;, &lt;Sm&gt;.

    【讨论】:

      【解决方案3】:

      它们只是用来定义寄存器,小写字母只是用来分隔它们以进行解释。 Rd 是目的地,但 Rn、Rm 等只是您可以使用的任何寄存器。例如,当解释像“Rd 等于 Rn 与 Rm 逐位与运算”时,这是判断哪个是哪个的唯一方法,因为您不能使用数字。

      它们可以是 Rx、Ry 等,也可以是 Ra、Rb...。

      【讨论】:

        猜你喜欢
        • 2022-12-13
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 2014-12-10
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        相关资源
        最近更新 更多