我正在尝试理解在汇编中写入的语法,以便首先正确地编写代码,然后有效地编写代码。
在此示例中,它使用"=r"
asm volatile ("MRS %0, PMUSERENR_EL0\n": "=r"(value));
这将读取寄存器的值并将其存储在值变量中。另一个示例使用::"r"
asm volatile ("MSR PMUSERENR_EL0, %0\n":: "r"(value));
将值变量写入PMUSERENR_ELO寄存器。这是另一个例子:How to measure program execution time in ARM Cortex-A8 processor?。
当我尝试使用上述两个命令编译一个简单的测试代码时,我得到错误::9:2: error: output operand constraint lacks '='
如果我添加“=”并删除一个“:”它将编译但是当我测试它时,它只需说Illegal instruction
如果有人可以请解释有用的差异,许多汇编教程显示相同的格式但没有解释。它在64位手臂平台上,如果它提供任何洞察力。感谢。
答案 0 :(得分:1)
如果没有输出值与汇编代码相关联,则该部分 必须为空,但两个冒号必须仍然分开汇编代码 来自输入操作数。
原因是因为这是标准。一个冒号用于输出,两个冒号用于输入。