gcc 指令mrc p15在ARM内联汇编中做什么?

snvhrwxg  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(140)

ARM装配中的这条生产线是做什么的?

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

字符串
p15是什么?通常,寄存器以r为前缀,如r15
符号::是什么?c9, c1的作用是什么?

pprl5pva

pprl5pva1#

虽然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的概述,请参阅此处-x86可能类似于ARM。
: : "r" (counter)意味着指令具有:

  • 寄存器中没有输出需要在局部变量中结束
  • 从变量counter获取输入,该变量所在的寄存器应用作%0
  • 没有编译器应该注意的副作用(clobbers)
vngu2lb8

vngu2lb82#

手臂中的协处理器可能比其他处理器更明显/可见。尽管如此,这是一个协处理器访问功能,协处理器接口是通用的,这些指令是通用的,就好像你只是在通用总线上填写项目一样。现在,arm确实重用了一些东西,因为一个内核中的协处理器寄存器如果存在于另一个内核中,则更有可能是相关的或相同的。正确的答案是访问arm网站(infocenter.arm.com)并找到arm arm(ARM架构参考手册)和TRM(技术参考手册),了解您正在使用或正在查看的处理器系列和核心代码,在一个或两个手册中,它将有一个关于协处理器的部分,当您进入该部分时,您将看到协处理器编号,然后在该协处理器中注册,以及一些这些数字就说得通了ARM通常会说,在这里读取这个寄存器是确切的指令,在这里写入这个寄存器是确切的指令,它将采用您提供的形式。如果你正在寻找从代码倒退到它做什么,你会看到,你可以非常快速地工作到手册的那一节,并迅速找到指令,然后看看它对那个特定的核心或家族做了什么。另一种方法是查看章节标题,找到感兴趣的寄存器,然后查看用于操作它的指令的语法。
至于::双冒号,我猜你是从内联汇编中得到的,这与内联汇编有关,这是一个编译器的东西,与arm指令完全无关,arm指令以c13,0结束。

相关问题