用ARM汇编语言(raspberry pi)将数组的元素加在一起

时间:2019-12-17 19:27:17

标签: arrays assembly raspberry-pi arm

我有这个数组工作。程序正确循环,但这是我所能达到的。

我试图了解如何将第一个元素13保存到另一个寄存器,然后在程序保存时  循环时,将数组中的下一个元素添加到该寄存器,并在添加完所有元素后在我退出时显示所有元素的总和。

问题是当我尝试这样做时,我一直在非法使用寄存器错误或分段错误...我对语法或如何使用寄存器进行打印一无所知。我们的教授没有给我们提供很多文档供您浏览,而且我在网上搜索了一段时间也没有运气。

谢谢

@
@ int ary[] = {13, 44, 7, 29};
@ int main()
@ {  for (int index = 0; index < 4; index++)
@      printf("ary[%d] = %d\n", index, ary[index]);
@ }
@ ---------------------------------------
@       Data Section
@ ---------------------------------------

        .data
        .balign 4       
output: .asciz  "ary[%d] = %d\n"
ary:    .int    13
        .int    44
        .int    7
        .int    29

@ ---------------------------------------
@       Code Section
@ ---------------------------------------

        .text
        .global main
        .extern printf
        .extern scanf

main:   push    {ip, lr}        @ push return address + dummy register
                                @ for alignment
        mov     r5, #0          @ index = 0
        ldr     r4, =ary        @ get the address of ary
for:    cmp     r5, #4          @ index < 4?
        bge     exit            @ no

print:  mov     r1, r5          @ print index
        ldr     r2, [r4, r5, LSL #2] @ get ary[index]
        ldr     r0, =output
        bl      printf          @ print index and ary[index]
        add     r5, r5, #1
        b       for

exit:   pop     {ip, pc}        @ pop return address into pc


0 个答案:

没有答案