0
フィボナッチシーケンスの最初の10個の数字を配列に格納しようとしていますが、入力のインデックスにあるシーケンスの値を出力するためにユーザー入力を受け取ります。私のフィボナッチループが間違っているかどうか、またはインデックスの検索/印刷方法がわからない場合は私はよく分かりません。フィボナッチアレイ
マイコード:
.data
.balign 4
output: .asciz "%d\n"
select: .asciz "Input an index to check:"
a: .skip 40
.text
.global main
.extern printf
.extern scanf
main:
push {ip, lr}
ldr r7, =a @ Array a to r7
mov r8, #3 @ count
mov r9, #0 @ hard code first value
mov r10,#1 @ hard code second value
str r9, [r7, #1] @ store 0 in array
str r10,[r7, #2] @ store 1 in array
fib:
cmp r8, #10 @ Is count equal to 10?
beq end @ if 10 elements exit writeloop
mov r11, r10
add r10, r9, r10
mov r9, r11
str r10, [r7, r8]
add r8, r8, #1 @ increment count
b writeloop @ continue the loop
end:
ldr r0, =select @ Ask for index to check
bl printf @ C printf
ldr r0, =output
ldr r1, =select
bl scanf
ldr r1, =select
ldr r1, [r1]
ldr r1, [r7, r1, lsl #2]
ldr r0, =output
bl printf
pop {ip, pc}
私はそれが私の入力2つの値まで計算しないであろういくつかの理由で、入力を取っています。たとえば、位置1を確認したい場合は、入力を要求し、値を入力してEnterキーを2回押すまで実行されません。
3 [Enter]
3 [Enter]
それから私に間違った答えが与えられます。私は何が間違っているのか分かりません。
は、なぜあなたはアセンブリでこれをコーディングしていますか? –
私はクラスで組立を学んでいます。これは私たちがしなければならない練習プログラムです。 – Absiel
これは32ビットモードのARMだと仮定すると、r7からのストアオフセットは4の倍数でなければならないが、コードは1の倍数を使用している。scanfの場合、出力文字列の\ nに2つの入力が必要かキー。入力文字列に "%d"を使用することができます。コードでは、ユーザー入力を格納する変数のアドレスを指定する必要がありますが、私はそれを見ません。 – rcgldr