【问题标题】:What does the instruction mrc p15 do in ARM inline assembly?ARM 内联汇编中的指令 mrc p15 有什么作用?
【发布时间】:2012-08-29 14:08:58
【问题描述】:

ARM 汇编中的这行代码是做什么用的?

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

p15 是什么?通常寄存器以r为前缀,例如r15

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

【问题讨论】:

标签: gcc assembly arm inline-assembly


【解决方案1】:

虽然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)

【讨论】:

  • <Rd>, <CRn>, <CRm> 代表什么?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多