이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

4. MIPS의 명령어 구조와 명령어들

  • 2020.10.12 19:46
  • 학부 수업/컴퓨터구조
반응형

MIPS는 R, I, J의 세 가지 명령어 구조를 갖는다.

R-구조 명령어

op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
  • op: operation code (opcode)
  • rs: first source register number
  • rt: second source register number
  • rd: destination register number
  • shamt: shift amount (00000 for default)
  • funct: function code (extends opcode)

add 명령어가 대표적인 R-구조 명령어이다.

add rs rt rd shamt funct
32 17 18 8 0 0 for now
100000 10001 10010 01000 00000 00000

add 명령어는 1000001000110010010000000000000 으로 번역된다.

MIPS의 논리 연산

MIPS의 bitwise 연산자는 다음과 같다.

Operation C MIPS
Shift left << sll
Shift right >> srl
Bitwise AND & and, andi
Bitwise OR | or, ori
Bitwise NOT ~ nor

Shift 연산은 R-형식으로, shamt가 Shift를 얼마나 진행할지 나타내는 역할을 한다.

MIPS에서의 NOT 연산은 zero와의 NOR 연산을 통해 할 수 있다.

nor $t0, $t1, $zero # $zero는 언제나 0을 담고 있다.

I-구조 명령어

op rs rt constance or address
6 bits 5 bits 5 bits 16 bits
  • rt: destination or source register number
  • constance: $-2^{15} \text{to} + 2^{15} - 1$
  • address: offset added to base address in rs

I-구조는 직접연산이나 load/store 연산에 사용된다.

J-구조 명령어

op address
6 bits 26 bits

J-구조인 j(jump) 명령어는 unconditional branch 명령어로, address로 이동하는 역할을 한다.

Branch 명령어

beq와 bnq는 conditional branch 명령어이다.

beq/bnq rs rt rd 구조를 갖는데, beq는 rs와 rt가 같을 때, bnq는 다를 때 rd로 이동한다.

slt 명령어는 rd, rs, rt를 받고, 아래 c 코드와 같은 연산을 수행한다.

if (rs < rt) rd = 1; else rd = 0;

slti 명령어를 활용하여, rt 대신 상수를 쓸 수도 있다. slt, slti와 유사하지만 unsigned인 값의 비교를 위해 사용하는 sltu, sltui 명령어도 있다.

한편, j는 조건 없이 address로 이동한다.

Branch 예시

C 코드

if (a==b) f=g+h;
else f=g-h;

MIPS 코드

bnq $s3, $s4, Else # Else의 주소는 어셈블러가 계산
add $s0, $s1, $s2
j Exit #jump to exit
Else: sub $s0, $s1, $s2
Exit: ..

C 코드

while (save[i] == k) i+=1; // i는 $s3, k는 $s5, save 배열은 $s6에 저장

MIPS 코드

Loop:	sll  $t1, $s3, 2    # t1에 i를 왼쪽으로 2bit shift 하여 저장 (2bit shift == x4)
        add  $t1, $t1, $s6  # t1에 save + i*4 를 저장 (즉, save[i]의 주소)
        lw   $t0, 0($t1)    # t0에 save[i]값 저장
        bne $t0, $s5, Exit # save[i]!=k 면 break
        addi $s3, $s3, 1    # i+=1
        j    Loop
Exit:

 

반응형

'학부 수업 > 컴퓨터구조' 카테고리의 다른 글

5.5 프로그램의 실행 과정  (0) 2020.10.12
5. 메모리 접근 (Addressing)  (0) 2020.10.12
3. MIPS 아키텍처  (0) 2020.10.12
2. 명령어와 CPU 아키텍처 (Instructions and CPU Architectures)  (0) 2020.10.12
1. 프로세서의 응답시간, 클럭, 수율 (Latency, Clock Frequency, Yield of Processor)  (0) 2020.09.20

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 5.5 프로그램의 실행 과정

    5.5 프로그램의 실행 과정

    2020.10.12
  • 5. 메모리 접근 (Addressing)

    5. 메모리 접근 (Addressing)

    2020.10.12
  • 3. MIPS 아키텍처

    3. MIPS 아키텍처

    2020.10.12
  • 2. 명령어와 CPU 아키텍처 (Instructions and CPU Architectures)

    2. 명령어와 CPU 아키텍처 (Instructions and CPU Architectures)

    2020.10.12
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바