ARM アセンブリで stdin から 5 つの整数を加算するプログラムを作成していますが、無限ループに達しており、その理由がわかりません。
基本的なことを定義することから始めます
/*defines functions*/
.section .rodata
promptString:
.ascii "Enter numbers: \000"
readString:
.ascii "%d\000"
printSum:
.ascii "sum=%d\n\000"
/*global varibles*/
.section .data
.align 2
.comm string,4,4
.text
/*sets addresses*/
addrString: .word string
addrPromptString: .word promptString
addrReadString: .word readString
addrPrintSum: .word printSum
次に、メインを開始し、5回の反復が続くはずのループがありますが、代わりに無限ループに到達します
main:
stmfd sp!, {fp, lr}
mov r3,#0
mov r2,#0
mov r4,#5
loop:
cmp r3,r4
beq end
ldr r0, addrPromptString
bl printf
ldr r0, addrReadString
ldr r1, addrString
bl scanf
add r2,r2,r1
add r3,r3,#1
bl loop
end:
ldr r2, addrPrintSum
bl printf
ldmfd sp!, {fp, pc}
私が健全な論理だと思うものでは、r3が5に達し、5であるr4と等しくなるとジャンプして終了するはずです。
しかし、明らかにそうではありません。
ありがとう!