# 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)가 형성 되었다.)
'Applied > Assembly' 카테고리의 다른 글
[Ucode] 예제 프로그램 - 이중 중첩문(while) (2) | 2016.05.29 |
---|---|
[Ucode] 예제 프로그램 - 함수 호출 (0) | 2016.05.29 |
[Mips Code]factorial 만들기 (재귀형식, jar 명령어) (0) | 2016.03.09 |
[Mips Code]factorial 만들기 (재귀형식, j 명령어) (0) | 2016.03.09 |
[Mips Code]두 수 덧셈 하기 (0) | 2016.03.09 |