1

ARM 汇编中的这一行是做什么的?

mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)

是什么p15?通常寄存器以rin为前缀r15

符号是::什么,角色是什么c9, c1

4

2 回答 2

6

虽然MRC是通用协处理器互操作指令, cp15控制处理器是所有现代 ARM CPU 都具有的,并且已被 ARM 用于扩展片上单元(如高速缓存、MMU、性能监控等等。

一次接受你的指导:

mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)

根据ARM Cortex A7 MPCore Reference,指令格式为:

MRC{cond} P15, <Opcode_1>, <Rd>, <CRn>, <CRm>, <Opcode_2>

在第 4-11 页上,这被描述为将 CPU 寄存器传输到性能监视器计数寄存器(我猜count=0这是性能计数器的重置)。

至于内联汇编的语法。请参阅以获取 x86 概述 - 这可能类似于 ARM。

: : "r" (counter) 指令具有以下含义:

  • 寄存器中没有需要以局部变量结尾的输出
  • 从变量 获取输入counter,并且该寄存器应用作%0
  • 编译器没有应该注意的副作用(clobbers)
于 2012-08-29T15:45:22.120 回答
1

手臂中的协处理器可能比其他处理器更明显/可见。尽管如此,这是一个协处理器访问函数,协处理器接口是通用的,这些指令是通用的,就好像您只是在通用总线上填写项目一样。现在 arm 确实重用了一些东西,因为一个内核中的协处理器寄存器如果存在于另一个内核中,则更有可能不相关或相同。正确的答案是访问 arm 网站 (infocenter.arm.com) 并找到您正在使用的处理器系列和内核的 arm arm(arm 架构参考手册)和 trm(技术参考手册)或查看代码因为,在一本或两本手册中,它将有一个关于协处理器的部分,当您进入该部分时,您将看到协处理器编号,然后在该协处理器中注册,其中一些编号将是有意义的。ARM 通常会说,在这里读取这个寄存器是确切的指令,在这里写这个寄存器是确切的指令,它会采用您提供的形式。如果您希望从代码倒退到它的作用,您会发现您可以非常快速地进入手册的该部分并快速找到说明,然后查看它对特定核心或系列的作用。另一种方法是查看章节标题,找到感兴趣的寄存器,然后查看用于操作它的指令的语法。如果您希望从代码倒退到它的作用,您会发现您可以非常快速地进入手册的该部分并快速找到说明,然后查看它对特定核心或系列的作用。另一种方法是查看章节标题,找到感兴趣的寄存器,然后查看用于操作它的指令的语法。如果您希望从代码倒退到它的作用,您会发现您可以非常快速地进入手册的该部分并快速找到说明,然后查看它对特定核心或系列的作用。另一种方法是查看章节标题,找到感兴趣的寄存器,然后查看用于操作它的指令的语法。

至于 :: 双冒号,我猜你是从内联汇编中得到的,这与内联汇编有关,编译器的东西,与 arm 指令完全无关,arm 指令以 c13, 0 结尾。

于 2012-08-29T14:17:54.470 回答