在ARM

时间:2017-04-12 23:20:50

标签: assembly arm

我在将值从寄存器移动到内存位置时遇到问题。这很简单。我首先将格式字符串和值abc移动到正确的位置,然后调用printf。下一个街区是我遇到问题的地方。我致电adr r1, abcabc的位置转换为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

1 个答案:

答案 0 :(得分:0)

输出是否低于您要查找的内容? 不确定你的编程的目的。 下面的代码进行了一些修改,以减轻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