[Computer Architecture] MIPS basics

G·2023년 3월 14일
0

Computer Architecture

목록 보기
3/16
post-thumbnail

크게 두 가지의 Instruction Set을 사용하는 컴퓨터가 있는데 각각 RISC(Redueced Instruction Set Computer)CISC(Complex Instruction Set Computer)이다.
전자는 간단한 명령어로 구성되어 있으며 임베디드 시스템에 쓰인다. 후자는 우리가 이미 사용하는 Intel x86 64가 있다. 후자는 너무 어려우니 전자를 배운다고 한다..

그 중 하나인 MIPS(32bit)를 배울 것이다.

  • word: 32bit
  • h: 16bit
  • byte: 8bit

Registers

MIPS를 배우기 위해 배경지식을 알아보자.

  • MIPS는 32개의 레지스터를 사용한다.
  • Assembler names(1): $t0 ~ $t9은 임시 저장공간이다.
  • Assembler names(2): $s0 ~ $s7은 메모리에 저장된 데이터이다.
  • register 0($zero)는 0값만 가지고 있는 레지스터이다.
    나머지 레지스터는 다른 용도로 사용된다.

Memory Operands

MIPS는 메모리에 바로 Instruction을 수행할 수 없다. 메모리의 값을 레지스터로 가져온 후, Instruction을 수행해야한다. 이러한 이유는 메모리로 직접적으로 연산을 한다면 Instruction도 많아지고 하드웨어 설계도 어려워진다.

lw $t0, 8($s1): (8 + $s1레지스터에 저장된 값)을 주소로 사용하는 메모리에 있는 값을 $t0 레지스터에 저장한다.
sw $t0, 8($s1): (8 + $s1레지스터에 저장된 값)을 주소로 사용하는 메모리에 $t0 레지스터에 저장된 값을 옮긴다.

이는 메모리의 시작점이며, 시작점부터 32bit을 읽어온다.
메모리는 byte 단위로 주소가 잇으며 주소는 무조건 4의 배수를 사용해야한다.

MIPS는 word 단위의 정렬된 메모리 접근을 요구한다. 이 뜻은 word 단위의 데이터를 가져오거나 저장할 때, 4의 배수의 주소를 사용해야한다는 것이다.

little vs big endian

0x01234567

MIPS는 Big endian을 사용하며 이는 최하위 비트가 제일 나중에 저장되는 것을 의미한다. 최상위 비트부터 최하위 비트까지 주소의 오름차순으로 저장한다.

Instruction Examples

  • add $t0, $s0, $s1: t0 레지스터에 s0 + s1 값을 저장(sub도 동일)
  • addi: $s3, $s3, 4: $s3 + 4를 $s3에 저장(상수값, sub은 -상수로 수행)
  • add $t2, $s1, $zero: zero를 사용하여 레지스터간의 값 이동을 수행한다.

R-format Instruction

어셈블리어도 결국 인간의 언어이다. 명령어가 기계언어로 바뀌었을 때의 방식이 있다. 이 중 하나인 R-format을 알아보자.

  • op: operation code(연산자 식별자)
  • rs: first source register number(첫 번째 피연산자)
  • rt: second source register number(두 번째 피연산자)
  • rd: destination register number(저장될 레지스터)
  • shamt: shift amount(shift 연산의 범위)
  • funct: function code(op의 연장선)

I-format Instruction



I-format은 상수 또는 메모리 접근 Instruction에 사용된다.

  • op: operation code(연산자 식별자)
  • rs: first source register number(첫 번째 피연산자)
  • rt: second source register number(두 번째 피연산자)
  • constant or addrss: 상수값 또는 8($s1)에서 8에 해당한다.
profile
열심히 안 사는 사람

0개의 댓글