2017-04-12 68 views
0

我在将值从寄存器移动到内存位置时出现问题。这很容易。我首先将格式字符串和值abc移动到正确的位置,并致电printf。下一个块是我遇到问题的地方。我致电adr r1, abcabc的位置转换为r1。然后,我将寄存器r4初始化为10.当我尝试将r4的值存储到r1的位置时,这是abc所在的位置,我得到一个段错误。我真的不知道发生了什么问题。我觉得abc的地址是错误的,因为它是segfaulting,但我不知道。 代码如下:在ARM中使用STR命令时出错

.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 
+4

你需要把你的数据放到'.data'部分,如'.text'不可写。 – Jester

+0

虽然它很可能是你写信给.text是问题。但是你没有提供足够的信息,说明arm几乎没有告诉我们什么,需要知道芯片或内核,以及这个代码是什么地址空间(是ram还是ROM/flash等)。即使在闪存中也不意味着你不能写出价值,这取决于...(芯片/情况)。 –

回答

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