mrc p15 在 ARM 内联汇编中有什么作用,GNU C 内联汇编语法是如何工作的?

0x9*_*x90 0 assembly gcc arm inline-assembly

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

mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
Run Code Online (Sandbox Code Playgroud)

p15不是它应该是r15什么?

what is ::who arec9, c1每个论点的作用是什么?

mar*_*rko 5

虽然MRC是通用协处理器互操作指令, cp15控制处理器是所有现代 ARM CPU 所拥有的,ARM 已使用它是一种扩展片上单元(如缓存、MMU、性能监控等等。

一次接受你的指示:

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

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

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

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

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

: : "r" (counter) 意味着该指令具有:

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