首页 > 解决方案 > 如何在只读(ARM 程序集)的 CODE 部分中使用内存中的存储寄存器?

问题描述

这是我的代码:

AREA Swap, CODE

ENTRY
    EXPORT __main

__main

ADR R0, VAR_1
ADR R1, VAR_2
LDR R2, [R0]
LDR R3, [R1]

STR R2, [R1]
STR R3, [R0]

stop    B   stop

AREA Swap, DATA, READWRITE

VAR_1 DCD 8
VAR_2 DCD 7

END

我可以从地址(r0 和 r1)加载值,但我不能存储它们。我知道 CODE 部分是只读的,但是如果我添加 READWRITE 关键字,代码将无法正常工作。当我运行调试器时,唯一执行的是 MOV r0, r0 在此处输入图像描述

我试图改变内存映射权限,就像这个问题的答案一样: ARM Assembly storage registers to memory 但它不起作用

在此处输入图像描述

任何帮助表示赞赏。

标签: assemblyarmkeilarmasm

解决方案


您尚未指定目标处理器,但听起来 CODE 空间位于闪存中。作为一般规则,程序闪存在运行时实际上是只读的。充其量你会经历一个非常具体和仔细的过程来修改 Flash 的一部分。您不能仅通过将内存声明为链接器的 READWRITE 来更改内存的物理性质。


推荐阅读