【问题标题】:Text as parameter in inline assembly (ARM)?文本作为内联汇编(ARM)中的参数?
【发布时间】:2015-06-08 14:11:12
【问题描述】:

有没有办法将纯文本放入内联汇编 (ARM) 中? 我的问题是读取银行寄存器。 语法是(用户态的r11):

mrs r0, r11_usr

问题在于“usr”部分。

我试过了:

#define READ_REG_MODE(retvar, rg, mode) \
    asm volatile (\
    "mrs %[reg], r%c[rn]_%c[mod]\n\t"\
    :[reg] "=r" (retvar)\
    :[rn]"I"(rg), [mod]"X"("mode"):\
    )

在此宏和宏调用中使用和不使用引号。 使用 [mod]"X"("mode") 我得到了:

错误:选择的处理器不支持请求的特殊用途 寄存器 -- `mrs r0,r11_.LC0'

【问题讨论】:

  • 如果这是一个预处理器宏,那么甚至不需要专门考虑汇编 - C 预处理器完全能够标记宏参数和连接字符串,无论它们代表什么;)
  • 问题是更换要在报价范围内进行。宏替换不起作用。

标签: gcc arm inline-assembly


【解决方案1】:

这实际上并不需要靠近汇编器——这是 C 预处理器可以使用“字符串化”# operator 自行处理的事情:

#define READ_REG_MODE(retvar, rg, mode) \
    asm volatile (\
    "mrs %[reg], r%c[rn]_" #mode "\n\t"\
    :[reg] "=r" (retvar)\
    :[rn]"I"(rg):\
    )

【讨论】:

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