Assembly 添加环臂部件rpi
我对汇编非常陌生,我试图在使用scanf获取用户输入的同时在循环中添加内容。这是我的循环: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
.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的末尾。