ISA란?
Instruction set architecture로 한글로 번역하면 "명령어 집합 구조"입니다.
ISA는 최하위 레벨의 프로그래밍 인터페이스로 명령어, 레지스터, 메모리 접근, I/O 등 기계어를 작성하는데 필요한 모든 정보를 포함합니다.
하드웨어의 최상위단과 소프트웨어의 최하위단의 추상화된 interface입니다.
그래서 ISA는 HW와 SW 사이에서 서로를 분리시키는 관문 역할을 수행한다고 말할 수 있습니다.
MIPS ISA
MIPS 아키텍쳐의 ISA를 살펴보면 다음과 같이 명령어를 나눌 수 있습니다.
이 글 이후로는 모두 MIPS 아키텍처에 대해 설명하고 있습니다.
카테고리별 명령어
카테고리 | 설명 |
---|---|
Computational | 계산 연산 (산술, 논리, 비교) |
Load / Store | 메모리의 데이터 접근 |
Jump and Branch | 흐름 제어 (이동 / 분기) |
Floating Point | 실수 연산 (부동 소수점) |
Memory Management | 메모리 관리 |
Special |
MIPS 레지스터
Instruction formats
MIPS 아키텍처의 명령어 format의 길이는 고정된 32bit이지만 format에 따라 bit 수와 개수를 다르게 나눠서 사용합니다.
명령어 형식은 R
, I
, J
총 3개의 형식이 있습니다.
왜 이렇게 나누어서 사용할까요? 이 점을 알기 위해서 다음 철학을 살펴봅시다.
R 포맷
- Register
- 레지스터 2개를 사용한 산술, 논리, 비교 명령어
- R 포맷은 opcode가 0임
Field name | Bits | 설명 |
---|---|---|
op | 6 | 연산에 대한 opcode |
rs | 5 | source register |
rt | 5 | source register |
rd | 5 | destination register |
shamt | 5 | shift amount, shift 연산을 얼마나 할 것인지 저장 |
funct | 6 | opcode 확장용 function code |
- 예시
funct, rd, rs, rt 순서
sub $t0, $s1, $s2
레지스터 s1과 s2의 값을 빼서 t0에 저장하는 코드입니다. 이를 32bit 명령어로 나태내면 다음과 같습니다.
op | rs | rt | rd | shamt | funct |
---|---|---|---|---|---|
0 | 01111 | 01100 | 00100 | 0 | 0x22 |
I 포맷
- Immediate
- 상수를 바로 사용하기 때문에 메모리에서 상수를 로드하고 레지스터를 사용하여 저장하는 방식보다 빠름
- 하나의 레지스터 피연산자와 하나의 상수 피연산자가 있는 산술, 논리, 비교 명령어
- sign-extended when used (replicate msb)
Field name | Bits | 설명 |
---|---|---|
op | 6 | 연산에 대한 opcode |
rs | 5 | source register |
rt | 5 | destination register |
immed | 16 | constant로 offset 기능을 함 가능한 범위는 ± 2^15 |
- 예시
opcode rt, rs 순
lw $t0, 24($s3)
레지스터 s3의 값이 8이라고 하면
op | rs | rt | immed |
---|---|---|---|
100011 | 10010 | 01000 | 0000000000011000 |
레지스터 s3에서 저장된 값인 8을 가져와 24를 더하고 그 값인 32는 메모리 주소를 의미
즉, 메모리의 (s3 + 24) 번지인 32번지의 값을 읽어와 레지스터 t0에 저장하는 코드
J 포맷
1개의 피연산항만이 필요합니다. 분기 명령어에 사용하는 명령어 포맷입니다.
- Jump
참고
Computer Organization and Design 5th Edition. The Hardware/Software Interface / 저자 : David A. Patterson, John L. Hennessy
https://courses.cs.washington.edu/courses/cse378/02au/Lectures/05computationalI.pdf