[컴퓨터 시스템 구조] 2장 명령어: 컴퓨터 언어
Book Title : 컴퓨터 구조 및 설계
Author : David A. Patterson , L. Hennessy
Publisher : 한티미디어
이론보다 MIPS코드 짜는 법
2. 명령어: 컴퓨터 언어
2.1 서론
Instruction Set
- 명령어 집합
- 마이크로프로세서가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어.
- SW와 HW사이에서 동작(중재자)
- 단순할수록 성능이 좋다.
설계 원칙
- 간단하게 하기 위해서는 규칙적인 것이 좋다.
- 작은 것이 더 빠르다.(항상 그런것은 아님)
- 좋은 설계에는 적당한 절충이 필요하다.
2.2 하드웨어 연산
MIPS 산술 명령어
- 반드시 한 종류의 연산만 지시
- 항상 변수 3개 가짐
- 줄이 끝나면 주석도 끝남
- 설계 원칙1
1 | <C> |
2.3 피연산자
- MIPS 구조에서 레지스터의 크기는 32비트, 이를 한 워드(word)라고 부름
- 레지스터의 개수 또한 32개다.
- 설계 원칙2
메모리 피연산자
- 데이터 전송 명령어 (전송 방향에 주의)
- lw (load word) 메모리 <- 데이터
- sw (store word) 메모리 -> 데이터
1 | <C> |
- MIPS에서 워드의 시작 주소는 항상 4의 배수임.
- MIPS는 빅엔디안(big-endian)을 사용함.
상수 피연산자
- addi $s3, $s3, 4 #$s3 += 4
- $zero #0
- 자주 생기는 일을 빠르게의 좋은 예
2.4 부호있는 수와 부호없는 수
- LSB(Least significant bit) : 가장 낮은 주소(오른쪽) 비트
- MSB(most significant bit) : 가장 높은 주소(왼쪽) 비트
- MSB가 0이면 양수, 1이면 음수
- 역부호화 : 모든 비트를 뒤집고 1 더하기
2.5 명령어의 컴퓨터 내부 표현
레지스터 이름을 숫자로 매핑하는 규칙
- &t0 ~ $t7 은 8 ~ 15번
- &s0 ~ $s7 은 16 ~ 23번
MIPS명령어의 필드
위 명령어 형식을 R-format이라고 하는데 네번째 필드 길이가 R타입의 나머지 세 필드 길이를 더한 것과 같은 I-format도 있다.
설계 원칙 3
2.6 논리연산 명령어
- 명령어 a, b, c
- a = b 명령어 c
- sll (shift left)
- srl (shift right)
- and, andi (bit-by-bit AND)
- or, ori (bit-by-bit OR)
- nor (bit-by-bit NOT)
판단을 위한 명령어
- beq rs, rt, L1
- if (rs == rt) branch to L1;
- bne rs, rt, L1
- if (rs != rt) branch to L1;
- blt, bge같은게 없는 이유는 클럭이 느려지기 때문(상대적으로 복잡)
- slt, slti / sltu, sltui
- slt $t0, $s3, $s4
- slt(set on less than) : 왼쪽 값이 작으면 1, 크면 0으로 세팅
j는 점프
하드웨어의 프로시저 지원
프로그램이 프로시저를 실행할 때의 6단계
- 프로시저가 접근할 수 있는 곳에 인수를 넣는다
- 프로시저로 제어를 넘긴다
- 프로시저가 필요로 하는 메모리 자원을 획득한다
- 필요한 작업을 수행한다
- 호출한 프로그램이 접근할 수 있는 장소에 결과 값을 넣는다
- 프로시저는 프로그램 내의 여러 곳에서 호출될 수 있으므로 원래 위치로 제어를 돌려준다
레지스터 할당
- $a0 - $a3 : 전달할 인수를 가지고 있는 인수 레지스터 4개
- $v0 - $v1 : 반환되는 값을 갖게되는 값 레지스터 2개
- $ra(return address) : 호출한 곳으로 되돌아가기 위한 복귀 주소를 가지고 있는 레지스터 1개
명령어
- jal (jump-and-link-instruction)
- jal ProcedureAddress
- 지정된 주소로 점프하면서 동시에 다음 명령어의 주소를 $ra레지스터에 저장하는 명령
- jr (jump register)
- jr $ra
- 레지스터에 저장된 주소로 무조건 점프