Assembly 添加环臂部件rpi

Assembly 添加环臂部件rpi,assembly,arm,Assembly,Arm,我对汇编非常陌生,我试图在使用scanf获取用户输入的同时在循环中添加内容。这是我的循环: .data .balign 4 format: .asciz "%d" .balign 4 numCount: .word 0 .balign 4 counter: .word 0 .balign 4 prints: .asciz "%d\n" .text .global main main: ldr r5, =counter mov r6, #0 bl loop done: ldr r0, =prin

我对汇编非常陌生,我试图在使用scanf获取用户输入的同时在循环中添加内容。这是我的循环:

.data
.balign 4
format: .asciz "%d"
.balign 4
numCount: .word 0
.balign 4
counter: .word 0
.balign 4
prints: .asciz "%d\n"
.text

.global main
main:
ldr r5, =counter
mov r6, #0
bl loop
done:
ldr r0, =prints
//mov r1, r5
ldr r1, [r5]
bl printf

mov r7, $1
svc $0
loop:
    ldr r0, =format
    ldr r1, =numCount
    bl scanf
    ldr r1, =numCount


    add r6, r6, #1
    add r5, r5, r1


    cmp r6, #5
    beq done

    b loop

退出循环后,我尝试用ldr r1、[r5]打印F总数字(存储在r5?),但seg出现故障。如果我做了
movr1,r5
它会打印地址(我想?),比如630150。在添加之前,我还尝试将
ldrr5、[r5]
ldrr1、[r1]
放入循环中,但seg也出现了故障。当我试图将一个寄存器的引用加载到另一个寄存器时,为什么会出现segfault?

您是否尝试过在调试器中单步执行该程序?您可能会对在循环中添加的内容感到惊讶。
addr5,r5,r1
正在递增指针
r5
。您需要执行类似于
ldr rX,[r5]
添加rX,rX,r1
str rX,[r5]
的操作。这将“添加”scanf值到“计数器”内存中。ARM不直接在内存上进行操作。或者,您可以像清除
r6
一样清除
r5
,然后将值存储在main的末尾。您是否尝试过在调试器中单步执行该程序?您可能会对在循环中添加的内容感到惊讶。
addr5,r5,r1
正在递增指针
r5
。您需要执行类似于
ldr rX,[r5]
添加rX,rX,r1
str rX,[r5]
的操作。这将“添加”scanf值到“计数器”内存中。ARM不直接在内存上进行操作。或者,您可以像清除
r6
一样清除
r5
,然后将值存储在main的末尾。