[MIPS] MIPS 함수 및 반복문 사용법

2022. 12. 11. 12:00·공부/컴퓨터 구조론
728x90

MIPS 반복문을 사용할 때는 재귀적인 방식을 사용하곤 한다.

 

예를 들어 입력받은 수부터 1까지 모두 출력하는 어셈블리 코드의 흐름은 다음과 같다.

 

  1. 입력받은 수를 레지스터에 저장한다.
  2. 해당 레지스터의 수를 출력한다.
  3. 레지스터의 값에서 1을 뺀다.
  4. 레지스터의 값이 1이 아닌 경우 2번으로 돌아간다.
  5. 레지스터의 값이 0인 경우 종료한다.

이번 포스팅에서 새롭게 배울 내용은 함수를 실행시키는 방법이다.

 

지금까지는 main 함수 하나만 사용하였는데 우리가 임의로 함수를 만들어서 사용할 수도 있다.

 

loop라는 이름의 함수를 만든다면 아래와 같다.

 

    .data
    .text

main:


loop:

main 함수에서 특정 함수를 실행하고 싶다면 "j loop"와 같이 loop라는 함수로 jump할 것이라는 것을 알려주면 된다.

 

이렇게 jump 하는 방식에는 조건부 점프와 무조건 점프로 나뉜다.

 

조건부 점프의 경우 특정 조건을 만족해야만 하고 무조건 점프는 조건없이 점프한다.

 

분기 명령어 피연산자 1 피연산자 2 피연산자 3 의미
bne (not equal) $t0 $t1 loop if ($t0 != $t1) jump loop
beq (equal) $t0 $t1 loop if ($t0 == $t1) jump loop
jump loop 없음 없음 jump loop
조건 명령어        
slt (less than) $t0 $t1 $t2 if($t1 < $t2) $t0 = 1
else $t0 = 0
slti
(less than immediately)
$t0 $t1 5 if($t1 < 5) $t0 = 1
else $t0 = 0

 

위 명령어들을 바탕으로 코드를 짜본다면 다음과 같다.

    .data
    .text

main:
    li $v0, 5
    syscall

    move $t0, $v0
    j loop


loop:
    move $a0, $t0
    li $v0, 1
    syscall

    sub $t0, $t0, 1
    bne $t0, $zero, loop

    li $v0, 10
    syscall

참고로 $zero는 무조건 0을 가지고 있는 레지스터이다.

728x90

'공부 > 컴퓨터 구조론' 카테고리의 다른 글

[컴퓨터구조론] 파이프라이닝과 해저드  (0) 2022.12.15
[컴퓨터구조론] 데이터 경로 (단일 사이클 방식, 다중 사이클 방식)  (0) 2022.12.14
[MIPS] MIPS 스택을 활용한 반복문  (0) 2022.12.12
[MIPS] MIPS 입력 및 연산 명령어 (정수, 문자열 입출력)  (0) 2022.12.10
[MIPS] spim simulator 설치 및 MIPS 출력 명령어  (0) 2022.12.09
'공부/컴퓨터 구조론' 카테고리의 다른 글
  • [컴퓨터구조론] 데이터 경로 (단일 사이클 방식, 다중 사이클 방식)
  • [MIPS] MIPS 스택을 활용한 반복문
  • [MIPS] MIPS 입력 및 연산 명령어 (정수, 문자열 입출력)
  • [MIPS] spim simulator 설치 및 MIPS 출력 명령어
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    푸쉬 알람
    codetree
    스프링 OAuth2
    code tree
    bfs
    binary search
    Vector Store
    Merge
    parametric search
    RNN
    ChatPromptTemplate
    openvidu 배포
    nn.RNN
    스택
    ci/cd
    파이썬
    다익스트라
    AWS Lambda
    embedding
    influxDB CLI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[MIPS] MIPS 함수 및 반복문 사용법
상단으로

티스토리툴바