Self-Improvement
MIP의 함수 포인터(Function pointer) 예제 및 확인 $t9 본문
#include <stdio.h>
int sum(int, int);
int main(void)
{
int (*fp)(int, int) // 함수 포인터 선언
int res;
fp = sum; // 함수명을 함수 포인터에 저장
res = fp(10,20); // 함수 포인터로 함수 호출
printf("result : %d\n", res);
return 0;
}
int sum(int a, int b)
{
return(a+b);
}
단순하게 sum 함수의 주소를 $t9에 MOVE하고 JALR하여 호출하고 있다.
#include <stdio.h>
void func(int (*fp)(int, int));
int sum(int a, int b);
int mul(int a, int b);
int max(int a, int b);
int main(void)
{
int sel;
printf("1. 두 정수의 합\n");
printf("2. 두 정수의 곱\n");
printf("3. 두 정수 중에서 큰 값 계산\n");
printf("원하는 작업을 선택하세요 : ");
scanf("%d", &sel); // 번호 입력
switch(sel)
{
case 1:func(sum); break; //func 함수를 호출하면서 sum를 매개인자로
case 2:func(mul); break; //func 함수를 호출하면서 mul를 매개인자로
case 3:func(max); break; //func 함수를 호출하면서 max를 매개인자로
}
void func(int (*fp)(int, int)) // 포인터로 인자를
{
int a,b;
int res;
printf("두 정수값을 입력하세요 : ");
scanf("%d%d", &a, &b);
res = fp(a,b); // 함수 포인터로 가리키는 함수를 호출
printf("결과값은 : %d\n", res);
}
int sum(int a, int b)
{
return (a+b);
}
int mul(int a, int b)
{
return (a*b)
}
int max(int a, int b)
{
if (a>b) return a;
else return b;
}
scanf로 부터 받은 값으로 각각 case문을 수행한다.
각 case에서는 동일하게 function pointer를 인자로주고 func 함수를 호출하고 있다.
func 함수에서는 인자로 받은 function pointer를 scanf로 부터 받은 값을 인자로 주고 $t9를 이용하여 호출하고 있다.
'MIPS' 카테고리의 다른 글
MIPS - BOf (big/little- Endian Shellcode, sleep 안씀) (0) | 2021.01.28 |
---|---|
MIPS의 구조체 기초 어셈블리어 분석 (0) | 2021.01.14 |
mips의 pointer(포인터) 사용 예제 ($v0) (0) | 2021.01.11 |
ARM, MIPS의 socket TYPE 차이 (0) | 2020.12.29 |
** MIPS Instruction ** (0) | 2020.09.10 |