装配臂中的这条线有什么作用?
mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
谁p15
不是r15
所有其他人都是什么?
::
c9, c1
是什么{{1}}每个论点的作用是什么?
答案 0 :(得分:2)
虽然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概述,请参阅this - 这可能类似于ARM。
: : "r" (counter)
表示该指令具有:
counter
获取输入,其所在的寄存器应该用作%0
。 答案 1 :(得分:1)
手臂中的协处理器可能比其他处理器更明显/可见。然而,这是一个协处理器访问功能,协处理器接口是通用的,这些指令是通用的,就好像你只是填写通用总线上的项目。现在,arm会重新使用一些内核,如果一个内核中的协处理器寄存器存在于另一个内核中,则更有可能不相关或相同。正确的答案是访问arm网站(infocenter.arm.com)并找到您正在使用或查看代码的系列和处理器核心的臂臂(臂架构参考手册)和trm(技术参考手册)因为,在一个或两个手册中,它将有一个关于协处理器的部分,当你进入该部分时,你将看到协处理器号然后在该协处理器中注册,并且一些数字将是有意义的。 ARM一般会说,这里读取这个寄存器是确切的指令,这里写这个寄存器是准确的指令,它将采用你提出的形式。如果您希望从代码向后转到它的功能,您将看到您可以非常快速地进入手册的该部分并快速找到指令,然后查看它对该特定核心或系列的作用。另一种方法是查看章节和章节标题,找到感兴趣的寄存器,然后查看用于操作它的指令的语法。
至于::双冒号,我猜你是从内联汇编获取的,这与内联汇编,编译器事物有关,与arm指令完全无关,arm指令以c13结尾,0。