반응형
Mips 어셈블리어로 factorial을 제작하는 코드이다.

Mips 코딩을 하는 동안에는 항상 asm코드 이전에 c코드로 어떻게 구상하는지 주석처리로 공개할 예정이다.


# 아래의 코드와 같은 방식으로 asm코드를 제작

# #include <stdio.h>

#int main()
#{
#    int i;
#    int n; // 몇팩토리얼?
#    int ans = 1;// 처음에는 1로 설정 
    
#    scanf("%d",&n);
#
#    if(n == 0)
#    { printf("1"); }
#
#    for(i = 1 ; i <= n ; i ++)
#    {
#      ans = ans * i;    
#    }
#    printf("%d",ans);
#}


.text
.globl main

main:       # int main

      # $t1 : i, $t2 : n, $t3 : ans
li $t1,1       # int i = 1;
li $t3,1        # int ans = 1;
li $v0,5       # scanf준비
syscall
move $t2,$v0 # scanf완료한 과정, n값을 입력받아낸다.

loop:       # for문
mul  $t3, $t3, $t1       # ans = ans * i
beq $t2,0,zerofact      # n == 0
beq $t1,$t2,result # i == n ?

addi $t1, $t1, 1       # i = i + 1;

j loop       # 다시 루프문으로


result: 
li $v0,1      # printf 준비
move $a0,$t3 # printf 과정, 결과값을 넘겨준다
syscall # 출력

li $v0,10               # end
        syscall
zerofact:
li $v0,1
addi $t2,$t2,1
move $a0,$t2
syscall


반응형