You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM7l架构下无法将word加载到寄存器的技术求助

问题原因及解决方法

核心错误点

1. 伪指令使用误解

你写的ldr R0, =val是ARM汇编的伪指令,它的作用是把val变量的内存地址加载到R0寄存器,而非你想要的val存储的数值(0xffffffff)。这直接导致传递给exit系统调用的不是预期数值,而是一个地址。

2. .data段未被正确链接/加载

从反汇编输出可见,ldr R0, =val生成的字面池(0xc位置)值为0x00000000,说明链接器没有把val的实际地址填充到这个位置。程序运行时R0里存的是无效地址,该地址的最低有效字节恰好是0x84(十进制132),因此bash返回的退出码为132。

修正后的代码

要加载val的内容,需先获取它的地址,再从地址中读取数值:

.global _start
_start:
    ldr R0, =val    @ 把val的地址加载到R0
    ldr R0, [R0]    @ 从R0指向的地址读取val的内容到R0
    mov R7, #1      @ exit系统调用的调用号是1
    svc 0           @ 触发系统调用

.data
val: .word 0xffffffff

正确的编译链接命令

确保使用完整流程,让链接器正确处理.data段:

as -o prog.o prog.s
ld -o prog prog.o

运行修正后的程序,就能得到预期的退出码255。

内容的提问来源于stack exchange,提问作者Ilya Loskutov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:36:31