【问题标题】:how can i use store registers in memory in CODE section that is ReadOnly (ARM Assembly)?如何在只读(ARM 程序集)的 CODE 部分中使用内存中的存储寄存器?
【发布时间】:2018-11-09 13:35:31
【问题描述】:

这是我的代码:

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 关键字,代码将无法正常工作。当我运行调试器时,唯一要执行的是 移动 r0, r0

我尝试更改内存映射权限,如此问题中的答案: ARM Assembly storing registers to memory 但它不起作用

感谢任何帮助。

【问题讨论】:

  • 请阅读the help pages,获取the SO tour,了解how to ask good questions,以及this question checklist。最后,不要发布 text 的图片。
  • 至于你的问题,我对你正在使用的汇编程序一无所知,但是使用数据上方的(不可复制!)AREA 指令,它似乎将数据放入DATA 部分?创建Minimal, Complete, and Verifiable Example 时,除了将其复制粘贴为文本外,请在失败 程序中进行。
  • 为什么您的所有区域都使用相同的名称?来自文档:“具有相同名称的所有区域都放置在同一个 ELF 部分中。仅应用特定名称的第一个 AREA 指令的属性。”
  • 并且根据您使用的汇编器版本,重用相同的名称可能是forbidden altogether:“您必须为同一源文件中的每个区域使用不同的名称。”

标签: assembly arm keil armasm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多