assembly - 如何在汇编宏中以立即值作为参数编写 riscv CSR?

标签 assembly gnu-assembler riscv

我正在尝试编写一个可重用的宏来在程序集中配置一些 CSR。

例如

.macro initTrap entry, status, enable
    la          t0, entry
    csrw        mtvec, t0
    csrwi       mstatus, status
    csrwi       mie, enable
.endm

然后使用它(至少测试):

initTrap trap_entry, 0x0, 0x0

编译(汇编)时出现以下错误:

start.S:179: Error: Instruction csrwi requires absolute expression
start.S:179: Error: Instruction csrwi requires absolute expression
start.S:179: Error: Instruction csrwi requires absolute expression

有没有办法创建一个传递立即值而不会出现此错误的宏? (除了 ASM 编程指南之外,我似乎找不到任何有关 risc-v 汇编宏的文档,这就是我到目前为止的方法)

最佳答案

答案:参数使用时需要反斜杠。

.macro initTrap entry, status, enable
    la          t0, \entry
    csrw        mtvec, t0
    csrwi       mstatus, \status
    csrwi       mie, \enable
.endm

关于assembly - 如何在汇编宏中以立即值作为参数编写 riscv CSR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66319166/

相关文章:

c - 了解stm8s反汇编中的功能?

assembly - 将 2 个两位数相加,结果为汇编中的 3 位数字

assembly - 如何使用 GNU GAS 汇编器生成像 nasm -f bin 这样的普通二进制文件?

linux-kernel - RISC-V 中的地址指定

performance - 可以使用哪些方法在现代x86上有效地扩展指令长度?

c++ - 如何指示 VC++ 编译器不内联常量?

runtime - 如何跟踪尖峰中的动态指令(在 RISC-V 上)

cpu - 为什么不推荐使用或过时分支延迟槽?

linux - 带气体组件的 Printf

assembly - 为什么前向引用 ADR 指令在 Thumb 代码中以偶数偏移进行汇编?