【发布时间】:2017-04-12 23:20:50
【问题描述】:
我在将值从寄存器移动到内存位置时遇到问题。这很容易。我首先将abc 的格式字符串和值移动到正确的位置并调用printf。下一个块是我有问题的地方。我打电话给adr r1, abc 以获取abc 的位置到r1。然后我将寄存器r4 初始化为10。当我尝试将r4 的值存储到r1 的位置(abc 所在的位置)时,我得到了一个段错误。我真的不知道出了什么问题。我觉得abc 的地址是错误的,因为它是段错误的,但我不知道。
代码如下:
.section .text
.global main
main:
push {lr}
ldr r1, abc
ldr r0, =print_str
bl printf
adr r1, abc
mov r4, #10
str r4, [r1]
ldr r1, abc
ldr r0, =print_str
bl printf
pop {lr}
bx lr
print_str: .asciz "%d\n"
abc: .word 400
【问题讨论】:
-
你需要把你的数据放到
.data部分,因为.text是不可写的。 -
尽管您可能正在写入 .text 是问题所在。但是您没有提供足够的信息来指定 arm 几乎什么也没告诉我们,需要知道芯片或内核,以及这段代码是什么地址空间(是 ram 还是 rom/flash 等)。即使在闪存中也不意味着您不能 str 写入值,这取决于...(取决于芯片/情况)。