문제 설명
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ int Asm_Add_Sqr(int a, int b);
@ Sqr을 호출하면 r0-r3,r12는 변형 가능성이 있음
@ 파괴 우려가 있는 변수는 대피시킴
@ leaf function이 아니므로 lr을 저장한다
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.extern Sqr
.global Asm_Add_Sqr
.type Asm_Add_Sqr, %function
Asm_Add_Sqr:
@ int Asm_Add_Sqr(int a, int b);
@ {
@ return (Sqr(a)+Sqr(b));
@ }
@ C의 함수인 Sqr()을 이용
정답 코드
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ int Asm_Add_Sqr(int a, int b);
@ Sqr을 호출하면 r0-r3,r12는 변형 가능성이 있음
@ 파괴 우려가 있는 변수는 대피시킴
@ leaf function이 아니므로 lr을 저장한다
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.extern Sqr
.global Asm_Add_Sqr
.type Asm_Add_Sqr, %function
Asm_Add_Sqr:
@ int Asm_Add_Sqr(int a, int b);
@ {
@ return (Sqr(a)+Sqr(b));
@ }
@ C의 함수인 Sqr()을 이용
push {r4-r6, lr}
mov r4, r1
bl Sqr
mov r5, r0
mov r0, r4
bl Sqr
add r0, r0, r5
pop {r4-r6, pc}
메모
printf 내부의 \n 습관화 필요