[MIPS] MIPS 입력 및 연산 명령어 (정수, 문자열 입출력)

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

저번 포스팅에서는 정수와 문자열을 출력하는 방법에 대해서 공부하였다.

 

이번에는 두 수를 입력받아서 값을 더하는 어셈블리 코드를 만들어보려고 한다.

 

정수 출력 system call code는 1, 문자열 출력 system call code는 4이다.

 

그리고 정수 입력 system call code는 5, 문자 입력 system call code는 8이다.

 

두 정수를 입력받아서 합을 출력해보려 한다.

 

코드를 만들기에 앞서 system call code와 산술 연산 명령어를 정리하자면 다음과 같다.

system call code 의미
1 정수 출력
4 문자 출력
5 정수 입력
8 문자 입력

산술 연산 명령어

명령어 피연산자 1 피연산자 2 피연산자 3 의미
add $t0 $t0 $t1 $t0 = $t0 + $t1
addi (add immediately) $t0 $t0 1 $t0 = $t0 + 1
sub $t0 $t0 $t1 $t0 = $t0 - $t1
sub $t0 $t0 1 $t0 = $t0 - 1
mul $t0 $t0 $t1 $t0 = $t0 x $t1
mult $t0 $t1 없음 Lo = $t0 x $t1
div $t0 $t1 없음 Lo = $t0 / $t1 (몫)
Hi = $to mod $t1
(나머지)
mfhi $t0 없음 없음 $t0 = Hi
mflo $t0 없음 없음 $t0 = Lo

덧셈은 원하는 숫자를 레지스터 이용하지 않고 바로 더하려면 addi 명령어를 사용해야 하지만 

 

뺄셈은 sub 명령어 하나로 가능하다.

 

mult와 div를 보면 Hi와 Lo에 결과를 저장하는데 Hi의 값은 mfhi 명령어를, Lo의 값은 mflo 명령어를 사용하여 레지스터로 옮길 수 있다.

 

    위 명령어들을 바탕으로 두 수를 입력받아 더하는 코드의 흐름은 아래와 같다.
  1.  syscall을 위해 v0 레지스터에 정수 출력 system call code인 1을 저장한다
  2. syscall을 통해 system call을 한다.
  3. 콘솔창에 정수를 입력하면 v0 레지스터에 값이 저장되므로 다른 레지스터로 옮긴다.
    .data
    .text

main:
    li $v0, 5
    syscall
    move $t0, $v0

    li $v0, 5
    syscall
    move $t1, $v0

t0 레지스터와 t1 레지스터에 두 정수의 값을 입력받았다.

 

이제 연산을 할 차례이다.

 

    .data
    .text

main:
    li $v0, 5
    syscall
    move $t0, $v0

    li $v0, 5
    syscall
    move $t1, $v0

    add $t0, $t0, $t1

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

    li $v0, 10
    syscall

 

실행 화면

 

728x90

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

[컴퓨터구조론] 파이프라이닝과 해저드  (0) 2022.12.15
[컴퓨터구조론] 데이터 경로 (단일 사이클 방식, 다중 사이클 방식)  (0) 2022.12.14
[MIPS] MIPS 스택을 활용한 반복문  (0) 2022.12.12
[MIPS] MIPS 함수 및 반복문 사용법  (0) 2022.12.11
[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
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[MIPS] MIPS 입력 및 연산 명령어 (정수, 문자열 입출력)
상단으로

티스토리툴바