ARM汇编使用stmfd/ldmfd指令报expression too complex错误如何解决
错误原因
ARM架构的多寄存器加载/存储指令(LDM/STM系列,包含你使用的stmfd、ldmfd)的寄存器列表要求用花括号{} 包裹,你代码中错误使用了方括号[],汇编器无法识别该格式的寄存器列表,因此抛出表达式复杂的报错。
补充说明:方括号[]在ARM汇编里的作用是标记内存地址间接寻址,比如你代码中ldr r1, [r0]属于正确用法,不能用于多寄存器指令的寄存器列表位置。
解决方法
将两行报错指令中的方括号替换为花括号即可,修正后的完整代码如下:
.data integer: .long 25 .text .global main main: stmfd sp!, {lr} ldr r0, =integer ldr r1, [r0] add r1, #2 str r1, [r0] ldmfd sp!, {lr} mov pc, lr
如果后续需要批量操作多个寄存器,直接在花括号内用逗号分隔、或者范围写法即可,比如stmfd sp!, {r0-r3, lr}是ARM汇编中常见的入栈写法,完全符合指令语法规范。
内容的提问来源于stack exchange,提问作者Korsarq
相关产品推荐
相关产品推荐

