이번 챕터에서는 'Instruction Sets' 에 대해 알아보도록 하겠습니다.
Instruction Sets 이란 명령어의 집합입니다. 명령어는 기본적으로 CPU에 의해 디코딩이 되어서 수행이 됩니다.
이는 Binary 로 형태로 수행이 되고 이를 Machine Code 입니다. 이 형태를 인간이 알아보기 힘드니 assembly code 로 표현해주는 거죠.
Operation code(Op code)
: Do this
Source Operand reference
예를 들면
3 + 6 = 9 라는 연산이 있을 때 '+' 이 Opcode 이고 3, 6 이 Operand 입니다.
결과인 9는 Result Operand 로 씁니다.
예전에 보았던 그림입니다.
Instruction fetch. fetch 가 뭘까요?
메모리 주소를 주고 해당 내용을 가져오는 겁니다. 명령어 '+' 를 가지고 오는 겁니다.
CPU는 이를 decoding 합니다.
이제 3,6 을 들고 와야 합니다. Operand fetch 를 합니다.
그리고 명령어와 이 operand 로 계산을 합니다.(Data Operation)
이 결과를 저장시킬 주소를 계산하고 저장합니다.
Number of Addresses
-3 addresses
이런 경우는 많지는 않습니다.
-2 addresses
이렇게 만들면 명령어의 길이를 줄일 수 있는 장점이 있고 좀 더 복잡한 과정이 있어야할 겁니다. (extra work)
-1 addresses
보통 register(accumulator) 같은거
-0 addresses
주소가 필요 없어도 되는 경우
모든 명령어가 암묵적으로 실행됩니다.
어디에 쓸지에 대한 정보가 없습니다. 이미 알고 있기 때문입니다.
How Many Addresses
- More addresses
- More complex
- More registers
- Fewer instruction
적은 건 반대
Design Decisions
그럼 우리가 어떻게 instruction set 을 설정을 할까요?
예를 들어 얼마나 많은 전용 OP code 를 만들거냐?
얼마나 많은 레지스터를 쓸것이냐?
많이 쓰면 성능이 향상될겁니다. 단점은 비싸다는 거겠죠. 그리고 설계가 복잡해질 겁니다.
-Pentinum Data Types
16(word)
-PowerPC Data Types
32(word)
Big- or little-endian
shift 와 rotate 는 다릅니다.
Systems Control 을 살펴보도록 하겠습니다.
색깔에 대해 나뉘죠. 우선순위가 안 쪽으로 갈 수록 높아진다는 의미입니다. 가장 높은 우선순위는 Kernel mode 입니다.
Transfer of Control
- Branch - 만약 결과가 0 이면 branch x 쪽으로 점프르 해라
- Skip - 만약 제로이며 increment and skip (ISZ)
- Subroutine call
이 ISZ 명령어는 잘 기억을 해둘 필요가 있습니다.
ISZ Register 1
- ISZ(Increment operand and skip next instruction if the result is zero)
이는 R1 값을 increment 시키라는 겁니다. 코멘트는 초기 값이 음수 값이 설정되어 있다고 적혀져있습니다.
만약 -10이라고 가정을 해볼까요?
그럼 아래의 ISZ 만약 0 아니면 301 로 점프를 해라는 뜻입니다. -10 에 +1 을 했으니 -9 이고 0이 아니기 때문에 점프합니다 . 그럼 R1이 -1 로 갱신이 될 때까지 루프로 돌다가 0 이 되는 순간 311로 갑니다. 이는 조건이 10번 반복하라는 말과 동일하죠.
그럼 Branch Instruction을 더 살펴보도록 하겠습니다.
X,Y 를 빼서 그게 0이 되면 211 로 점프하라 (= X, Y 가 값으면) 만약 같지 않으면 BR 202 에 의해 반복이 됩니다.
BRE에서 E는 Equal 입니다. 즉 여기선 R1, R2 가 같으면 235 로 이동하라는 뜻입니다.
결국 이러한 명령어들을 통해 예전에 배운 Nested 프로그래밍이 실행이 됩니다.
이렇게 함수를 수행할때는 Stack 을 사용하게 됩니다.
4101 - 자기가 돌아올 주소를 stack push 한 겁니다.
이제 중요한 Byte Order 에 대해 이야기 해보겠습니다.
칩이 프로세서마다 어떻게 메모리에 기록이 되는지 그 프로세스 내부의 기록이 다릅니다. 이를 'Byte Order'라고 합니다.
다음 예제로 Byte Order 가 어떻게 다른지 보겠습니다.
다음은 '12345678' 이 저장되는 형태입니다.
'12 34 56 78'
로 왼쪽이 낮은 주소일 수도 있고
'78 56 34 12'
처럼 표현될 수도 있습니다.
이런 것을 Endian 이라고 합니다.
Big Endian 으로 맵핑이 되는 경우 Little Endian 으로 맵핑이 되는 경우 그 차이에 대해서 명확하게 알아야 합니다.
32비트라는 걸 알 수 있습니다. Big Endian 이 좀 직관적인 것을 알 수 있죠.
사용은 다 다릅니다. 일단 Internet 은 big endian 입니다.
'공부 > 컴퓨터 구조' 카테고리의 다른 글
컴퓨터구조12 CPU Structure and Function (0) | 2020.06.30 |
---|---|
컴퓨터구조11 Instruction Sets : Addressing Modes and Formats (0) | 2020.06.30 |
컴퓨터구조9 Computer Arithmetic (0) | 2020.06.23 |
컴퓨터구조7 Input/Output (0) | 2020.06.22 |
컴퓨터구조6 External Memory (0) | 2020.06.13 |