【问题标题】:Error with using STR command in ARM在 ARM 中使用 STR 命令时出错
【发布时间】: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 写入值,这取决于...(取决于芯片/情况)。

标签: assembly arm


【解决方案1】:

下面的输出是您要查找的吗?
不确定你编的目的。 您的代码在下面进行了一些修改以减轻 seg 错误,仅此而已。

.data
        print_str: .asciz "%d\n"                                                                                                                                                                     abc: .word 400
.text
    .global main
main:
    push {lr}

    ldr r1,=abc
    ldr r0, =print_str
    bl printf

    ldr r1,=abc
    mov r4, #10
    str r4, [r1]

    ldr r1,=abc
    ldr r0,=print_str
    bl printf

    pop {lr}
    bx lr

输出:

$ ./T94j0
132600
132600

【讨论】:

    猜你喜欢
    • 2018-12-11
    • 2012-07-03
    • 1970-01-01
    • 2016-01-02
    • 2019-01-12
    • 2022-01-11
    • 1970-01-01
    • 2018-04-22
    • 2021-09-08
    相关资源
    最近更新 更多