Assembly ARM指令集中的缩写(Rn,Rd,…)是什么意思?

Assembly ARM指令集中的缩写(Rn,Rd,…)是什么意思?,assembly,arm,instruction-set,instructions,thumb,Assembly,Arm,Instruction Set,Instructions,Thumb,最近我检查了ARM Cortex-M3处理器的指令集。 例如: ADD <Rd>, <Rn>, <Rm> ADD, 这些缩写的确切含义是什么? 我猜他们指的是不同类型的地址,比如直接地址,相对地址等等。 但究竟是什么呢 谢谢 它们只是用来定义寄存器,小写字母只是用来分隔它们以供解释。Rd是目的地,但Rn、Rm等只是您可以使用的任何寄存器。例如,在解释“Rd等于Rn,按位AND加上Rm”时,这是判断哪个是哪个的唯一方法,因为您不能使用数字 它们可以是Rx、R

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

ADD <Rd>, <Rn>, <Rm>
ADD,
这些缩写的确切含义是什么? 我猜他们指的是不同类型的地址,比如直接地址,相对地址等等。 但究竟是什么呢


谢谢

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


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

形式的操作数是指通用寄存器,即
r0-r15
(或可接受的别名,如
sp
pc
等)

我不确定它是否在任何地方被特别调用过,但有一种通用模式,即“d”表示目标,“t”表示目标,“n”表示第一个操作数或基址寄存器,“m”表示第二个操作数,偶尔“a”表示累加器。因此,您可能会发现类似于
(在破坏性的两个操作数指令中)或
(64位值跨一对GP寄存器保存)的指定。这在其他类型的寄存器中也是一致的,例如
VADD.F32,

基础:

  • Rd
    是目的地,
    Rn
    Rm
    是来源地。它们都是通用整数寄存器;FP将使用
    Sd
    /
    Sn
    /
    Sm
    Dd
    /
    Dn
    /
    Dm
    进行单人或双人训练。
    ARM语法将目标放在左侧,位于只读源操作数之前
更多信息,请参见Notlikethat的答案。一些小的补充:

  • t
    :在中,ARM员工评论说“t”可能意味着“转移”,而不是“目标”

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

    LDR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
    STR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
    
  • n
    m
    只是数学中常用的整数变量/索引名

  • s

    • STXR指令将存储到内存fom
      Xt
      (与STR类似),但它也会向
      Ws
      获取第二个返回值(写入成功了吗):

      STXR <Ws>, <Xt>, [<Xn|SP>{,#0}]
      
      我不容易找到AARC64

  • 如果有文档记录,“关于A64指令说明的第C2章”可能是信息的好位置,但它不在那里


关键是连接点,您可以看到指令的ascii/asm表示,然后您可以看到机器码二进制定义,这样您就可以看到哪些位去了哪里。他们可以很容易地说ra、rb、rc……正如已经回答的那样,d可能意味着目的地。n和m?
STXR <Ws>, <Xt>, [<Xn|SP>{,#0}]
ORR{<c>}{<q>} {<Rd>,} <Rn>, <Rm>, <shift> <Rs>