# #include <stdio.h>
# int factorial(int i)
# {
# if(i == 1)
# {
# return 1;
# }
# else if( i != 1 )
# {
# return i*factorial(i-1)
# }
# }
# int main()
# {
# int i;
# int ans;
# scanf("%d",&i);
# if(i == 0)
# {
# printf("%d",1);
# }
# ans = factorial(i);
# printf("%d",ans);
# }
.text
.globl main
main: # $t0 : i , $t1 : temp, $t2 : ans , $t7 : 1(0,1팩토리얼을 위한 값)
li $t7,1 # $t7에 1대입
li $t2,1 # $t2에 1대입
li $v0,5 # scanf 준비
syscall
move $t0,$v0 # $v0값을 $t0로 저장
beq $t0,0,return0 # 0이면 return0으로
j return1 # 그게 아니면 return1로
return0: # 1일때 결과 출력하는곳
li $v0,1 # print준비
move $a0,$t7 # $t7(1)값을 $a0로 저장
syscall
return1:
beq $t0,1,return0 # 1이면 return0으로
# 아래 코드는 2이상만 취급
mul $t2,$t2,$t0 # $t2에 $t2*$t0을 한것을 넣는다.
sub $t0,$t0,1 # $t0 = $t0 - 1
beq $t0,1,return2 # 여기서 $t0가 1이되면 return2로
j return1
return2:
li $v0,1 # print준비
move $a0,$t2 # $t7(1)값을 $a0로 저장
syscall
'Applied > Assembly' 카테고리의 다른 글
[Mips Code]stack기반 지역변수 설정 및 함수 콜 (0) | 2016.03.12 |
---|---|
[Mips Code]factorial 만들기 (재귀형식, jar 명령어) (0) | 2016.03.09 |
[Mips Code]두 수 덧셈 하기 (0) | 2016.03.09 |
[Mips Code]두 수 뺄셈 하기 (0) | 2016.03.09 |
[Mips Code]factorial 만들기 (for문 형식) (0) | 2016.03.08 |