首页 > 解决方案 > 在 ARM GAS 汇编程序中遍历数组时出现分段错误

问题描述

遍历我的数组时出现段错误。我知道问题出在数组索引/指针上,而且我做得不对,但我似乎在我正在使用的教程中找不到一个像样的例子。它正确打印了第一个值 (100),但在 print_loop 的第二次迭代中出现了段错误。增加指针并移动到列表中的下一个值的正确方法是什么?

任何建议将不胜感激!

编辑:段错误问题是因为我没有将格式重新加载到 R0 中。(感谢@Jester)。但是我仍然有一个问题,我实际上不知道如何将指针 R5 移动到下一个内存区域。一位评论者说我没有更改 r5,所以我没有遍历数组,但我实际上也不知道如何/应该更改它。“#-4”的存在只是因为它是他们在我正在使用的教程中使用的。由于“.balign 4”,我假设它是将索引与数组中的下一个值对齐。

.data
list:    .space 400
.balign 4
return:  .word 0
format:  .asciz " %d \n"

.text

.global main

main:
        ldr r1, =return
        str lr, [r1]
        mov r6, #0  @@ load zero into r6
        mov r7, #100 @@ load 100 into r7
increment:
        add r6, #1
        mov r1, r6
        ldr r3, =list
        str r1, [r3, #-4]*/
        cmp r6, r7
        blt increment

        ldr r5,=list
        mov r6, #0
print_loop:
        ldr r0, =format
        ldr r3, [r5, #-4] 
        mov r1, r3
        bl printf
        add r6, #1
        cmp r6, r7
        blt print_loop

exit:
        ldr lr, =return
        ldr lr, [lr]
        bx lr


.global printf

.end

标签: assemblysegmentation-faultarm

解决方案


推荐阅读