给定的线在臂组件中做了什么以及每个变量的目的是什么?

时间:2012-08-29 14:08:59

标签: assembly arm

装配臂中的这条线有什么作用?

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

p15不是r15所有其他人都是什么?

:: c9, c1是什么{{1}}每个论点的作用是什么?

2 个答案:

答案 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
  • 编译器应该没有任何副作用(clobbers)

答案 1 :(得分:1)

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

至于::双冒号,我猜你是从内联汇编获取的,这与内联汇编,编译器事物有关,与arm指令完全无关,arm指令以c13结尾,0。