반응형

# int i=1; j=2; k=3; // 이것을 var1, var2, var3로 변경


# main() 

# {


#     int a; // a는 0($sp)


#     a=foo(i, j);


# }


# int foo(int a, int b)


# {


#  int x, y, z; // x,y,z는 4($sp), 8($sp), 12($sp)로 설정

#   return (a+b);


# }



.data


var1: .word 1              # 전역 변수 설정

var2: .word 2

var3: .word 3


.text

.globl main


main:

sub $sp, $sp, 0   # 지역변수 생성을 위해 $sp공간을 생성

                  # main 지역 변수 a 공간 생성.


jal foo

lw $a0, 0($sp)     # a에 리턴 된 값 $a0에 입력

li $v0, 1          # 출력

syscall



foo:

sub $sp, $sp, 4   # foo 지역 변수 x 공간 생성

sub $sp, $sp, 4   # foo 지역 변수 y 공간 생성

sub $sp, $sp, 4   # foo 지역 변수 z 공간 생성

la $t1, var1       # var1의 주소를 $t1에 불러오고

lw $t1, ($t1)       # 그 주소에 있는 값을 $t1에 저장한다.

la $t2, var2       # var1의 주소를 $t2에 불러오고

lw $t2, ($t2)       # 그 주소에 있는 값을 $t2에 저장한다.


add $sp, $sp, 4   # 스택을 pop하여 스택 a가 있는 위치로 찾아간다

add $sp, $sp, 4   # 3번 push했으니 다시 3번 pop한다.

add $sp, $sp, 4

add $t3, $t1, $t2  # var1,var2값을 $t3에 저장


sw $t3,0($sp)      # $t3값을 0($sp) 즉 a에 저장

jr $ra





(, DATA 영역에 변수 i,j,k(var1,var2,var3)가 형성 되었다.) 









반응형