Self-Improvement
mips의 pointer(포인터) 사용 예제 ($v0) 본문
$fp는 프레임 포인터로써 주소를 뜻하며 ($fp)는 해당 주소에 있는 값을 뜻한다.
$fp + 0x28+failure = 주소
0x28+failure($fp) = 값
#include <stdio.h>
void swap_ptr(char **ppa, char **ppb);
int main(void)
{
char *pa = "success";
char *pb = "failure";
printf("pa -> %s, pb -> %s\n", pa, pb);
swap_ptr(&pa, &pb);
printf("pa -> %s, pb -> %s\n", pa, pb);
return 0;
}
void swap_ptr(char **ppa, char **ppb)
{
char *pt;
pt = *ppa; // *ppa = pa
*ppa = *ppb; // *ppb = pb
*ppb = pt;
}
0x28+failure($fp)에는 "failure" 값이 들어있다.
0x28+success($fp)에는 "success" 값이 들어있다.
위 2개의 인자로 print 함수가 이루어진다.
swap_ptr 함수를 호출할때 사용되는 인자는 주소를 받고 있다.
$fp + 0x28+failure, $fp + 0x28+success
swap_ptr 함수에서는 아래와 같다.
($v0) = *$v0
#include <stdio.h>
void print_str(char **pps, int cnt);
int main(void)
{
char *ptr_ary[] = {"eagle", "tiger", "lion", "squirrel"};
int count;
count = sizeof(ptr_ary)
print_str(ptr_ary, count);
return 0;
}
void print_str(char **pps, int cnt);
{
int i;
for(i=0; i<cnt; i++)
{
printf("%s\n", pps[i]);
}
}
var_1c 주소를 인자로 주고있다. 즉 포인터
인자로 받아온 주소에 있는 값을 하나씩 출력한다.
'MIPS' 카테고리의 다른 글
MIPS의 구조체 기초 어셈블리어 분석 (0) | 2021.01.14 |
---|---|
MIP의 함수 포인터(Function pointer) 예제 및 확인 $t9 (0) | 2021.01.12 |
ARM, MIPS의 socket TYPE 차이 (0) | 2020.12.29 |
** MIPS Instruction ** (0) | 2020.09.10 |
MIPS 기초분석 4 (Case, for 문) (0) | 2020.09.04 |