assembly - 如何在只读(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 但它不起作用
任何帮助表示赞赏。
解决方案
您尚未指定目标处理器,但听起来 CODE 空间位于闪存中。作为一般规则,程序闪存在运行时实际上是只读的。充其量你会经历一个非常具体和仔细的过程来修改 Flash 的一部分。您不能仅通过将内存声明为链接器的 READWRITE 来更改内存的物理性质。
推荐阅读
- javascript - 如何通过 JavaScript 找出特定插件在 WordPress 中是否处于活动状态?
- sql - 添加“1作为变量”时如何修复选择查询Rails中的虚拟属性错误
- vba - 如何让用户选择图像,然后将它们插入 Word PDF?
- arrays - 在 Julia 中替换数组中特定条目的值
- json - 使用嵌套数据创建 json 文件时的问题
- azure - Invoke-AzVMRunCommand - 错误处理的最佳实践?
- java - Groovy:如何验证 JAXB 实例是否存在嵌套属性和值
- javascript - 正则表达式量词匹配较短的序列
- c++ - 选择/取消选择所有复选框 WIN32
- python - 将字典转换为嵌套字典并在 python 中切换键 <-> 值