Self-Improvement

mips의 pointer(포인터) 사용 예제 ($v0) 본문

MIPS

mips의 pointer(포인터) 사용 예제 ($v0)

JoGeun 2021. 1. 11. 15:08

$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 주소를 인자로 주고있다. 즉 포인터

 

인자로 받아온 주소에 있는 값을 하나씩 출력한다.