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}
내가 입력을 복용하고, 어떤 이유로 그 때까지 입력이 개 값을 계산하지 않습니다. 예를 들어 위치 1을 확인하려면 입력을 요청하고 값을 입력하고 입력을 두 번 올릴 때까지 실행되지 않습니다.
3 [Enter]
3 [Enter]
그리고 나에게 잘못된 대답을줍니다. 내가 뭘 잘못하고 있는지 알 수 없다.
는 왜 어셈블리에이를 코딩? –
나는 수업에서 의회를 배우고 있는데, 이것은 우리가해야만하는 연습 프로그램이다. – Absiel
이것은 32 비트 모드에서 ARM이라고 가정하면 r7의 저장소 오프셋은 4의 배수가되어야하지만 코드는 1의 배수를 사용합니다. scanf의 경우 출력 문자열의 \ n에 두 개 입력해야하는지 궁금합니다 열쇠. 입력 문자열에 "% d"을 (를) 사용할 수 있습니다. 이 코드는 사용자 입력을 저장하기위한 변수의 주소를 지정해야하며 그렇게 표시되지 않습니다. – rcgldr