명령어 표현
- 명령어는 2진수로 인코딩 = 기계어
- MIPS 명령어
- 32비트 명령어로 인코딩
- 연산 코드(opcode)를 인코딩하는 형식의 작은 수, 레지스터 번호 등
- 규칙성
- 레지스터 번호
- $t0 – $t7 : 레지스터 8 – 15
- $t8 – $t9 : 레지스터 24 – 25
- $s0 – $s7 : 레지스터 16 – 23
- 레지스터를 표현하는데 5비트 필요
- 32 = 2^5이기 때문이다.
MIPS R-포맷 명령어(add, sub)
- Register 포맷
op | rs | rt | rd | shamt | funct |
6비트 | 5비트 | 5비트 | 5비트 | 5비트 | 6비트 |
- op : 연산 코드(opcode)
- rs : 첫 번째 소스 레지스터 번호
- rt : 두 번째 소스 레지스터 번호
- rd : 대상 레지스터 번호
- shamt : shift amount (현재는 00000)
- funct : 함수 코드(opcode 확장)
R-포맷 예제
add $t0, $s1, $s2
# $t0 : 8, $s1 : 17, $s2 : 18
어셈블리어 코드를 기계어로 변환
special | $s1 | $s2 | $t0 | 0 | add |
0 | 17 | 18 | 8 | 0 | 32 |
000000 | 10001 | 10010 | 01000 | 00000 | 100000 |
0000 0010 0011 0010 0100 0000 0010 0000_2 = 02324020_16
MIPS I-포맷 명령(addi, lw, sw)
- Immediate 포맷
op | rs | rt | constant or address |
6비트 | 5비트 | 5비트 | 16비트 |
- 직접 산술 및 로드/저장 명령
- rt : 대상 또는 소스 레지스터 번호
- constant : -2^15 ~ +2^15 – 1
- address : rs의 기본 주소에 오프셋이 추가
- 디자인 원칙 4: 좋은 디자인에는 좋은 타협이 필요하다.
- 다양한 형식으로 인해 디코딩이 복잡해졌지만 32비트 명령을 균일하게 허용
- 형식을 최대한 유사하게 유지
I-포맷 예제
lw $t0, 32($s0)
- lw : op (6비트)
- $t0 : rt (5비트)
- 32 : constant (16비트)
- $s0 : rs (5비트)
내장 프로그램
- 데이터와 마찬가지로 바이너리로 표현되는 명령어
- 메모리에 저장된 명령 및 데이터
- 프로그램은 프로그램에서 작동할 수 있다.
- 예: 컴파일러, 링커, ...
- 바이너리 호환성을 통해 컴파일된 프로그램이 다른 컴퓨터에서 작동할 수 있다.
- 표준화된 ISA(명령어 집합)
'컴퓨터시스템구조' 카테고리의 다른 글
[컴퓨터시스템구조] 08. MIPS 조건부 연산자(beq, bne, j, slt) (0) | 2023.10.14 |
---|---|
[컴퓨터시스템구조] 07. MIPS 논리 연산자(sll, srl, and, or, nor) (0) | 2023.10.14 |
[컴퓨터시스템구조] 05. Signed, Unsigned, 2의 보수 (0) | 2023.10.14 |
[컴퓨터시스템구조] 04. MIPS 명령어(add, sub, addi, zero) (1) | 2023.10.13 |
[컴퓨터시스템구조] 03. 성능 측정 (0) | 2023.10.13 |