2014-03-14 3 views
0

저는 초보자 인 ARM 프로그래머로서 루프에서 숫자를 출력하는 방법에 대해 궁금해하고있었습니다. 이것은 지금까지ARM을 사용하여 루프에서 숫자 인쇄

mov r3, #0 

loop: 
    add r6, r6, #1 
    push {ip, lr} 
    ldr r0, =string 
    mov r1, r6 
    bl printf ; how do i get back to the rest of the loop after calling this? 
    pop {ip, pc} 
    cmp r6, #10 
    ble loop 

    .data 

    string: .asciz "number: %d\n" 
+0

왜 루프 안에'pc'가 터지고 있습니까? – Michael

답변

0

BL printf의 내 코드입니다; 어떻게하면 을 호출 한 후 루프의 나머지 부분으로 돌아갈 수 있습니까? 이 질문입니다 가정

, 당신은 내부 printf에서 bl printf 후 지시로 다시 돌아갑니다. 이는 일반적으로 bx lr을 통해 이루어집니다. 중요한 세부 사항은 bl, branch with link 명령을 실행하면 CPU가 lr (r14) 레지스터에 다음 명령어의 주소를 저장합니다. 이렇게하면 링크 레지스터를 프로그램 카운터로 이동하여 이전 다음 명령어로 쉽게 되돌아 갈 수 있습니다.