ARM汇编中能否更新常量?能否实现如下示例代码逻辑?
ARM汇编中能否更新常量及正确实现方式
首先要明确:用.equ定义的是汇编阶段的符号常量,它在编译时会被直接替换为对应的数值,运行时内存中不存在这个"变量",所以完全没法在运行时修改它。你给出的代码存在两个核心问题:
mov r1, #numbers是把常量0加载到r1寄存器,而非变量的内存地址;str numbers [r1]语法错误,且numbers是编译时常量,没有可读写的内存空间供你写入。
如果要实现"循环自增一个值并保存"的功能,你需要在.data段定义一个可读写的变量,而非用.equ定义常量,正确代码示例如下:
.data numbers: .word 0 @ 在数据段定义一个32位可读写变量,初始值设为0 .text infloop: ldr r1, =numbers @ 将变量numbers的内存地址加载到r1 ldr r2, [r1] @ 从内存中读取numbers的当前值到r2 add r2, r2, #1 @ 将r2的值自增1 str r2, [r1] @ 把更新后的值写回numbers的内存地址 b infloop @ 跳转到infloop标签,进入无限循环
这段代码的逻辑是:每次循环先获取变量的内存地址,读取当前值,自增后再写回内存,这样就能实现你想要的"持续更新一个值"的效果。
内容的提问来源于stack exchange,提问作者нуль
相关产品推荐
相关产品推荐

