Home > Study > C Language > ARM System Programming > [ex33] AAPCS_Asm_Add_Sqr 함수

[ex33] AAPCS_Asm_Add_Sqr 함수
Study Language

문제 설명


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 습관화 필요