J'essaie de stocker les 10 premiers nombres de la séquence de Fibonacci dans un tableau, puis de saisir l'entrée de l'utilisateur pour imprimer la valeur de la séquence dans l'index de l'entrée. Je ne suis pas sûr si ma boucle de Fibonacci est incorrecte, ou si je ne sais pas comment rechercher/imprimer l'index.Fibonacci Array
Mon code:
.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}
Quand je prends l'entrée, pour une raison quelconque, il ne sera pas calculer jusqu'à ce que je saisis les deux valeurs. Par exemple, si je veux vérifier la position 1, elle demandera ma saisie, et elle ne s'exécutera que si je tape une valeur et que j'appuie deux fois sur Entrée.
3 [Enter]
3 [Enter]
et puis il me donne juste la mauvaise réponse. Je ne peux pas comprendre ce que je fais mal.
Pourquoi vous coder cette compagnie? –
J'apprends l'assemblage dans une classe, et c'est un programme d'entraînement que nous devons faire. – Absiel
En supposant que ce soit ARM en mode 32 bits, les décalages de stockage de r7 doivent être des multiples de 4, mais le code utilise des multiples de 1. Pour le scanf, je me demande si le \ n dans la chaîne de sortie nécessite deux entrées clés. Vous pouvez utiliser "% d" pour la chaîne d'entrée. Le code doit spécifier l'adresse d'une variable pour stocker l'entrée de l'utilisateur dans et je ne vois pas cela. – rcgldr