본문 바로가기
공부/컴퓨터 구조

컴퓨터구조10 Instruction Sets : Characteristics and Functions

by 맑은청이 2020. 6. 29.
728x90
반응형

이번 챕터에서는 '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) 

 

이 결과를 저장시킬 주소를 계산하고 저장합니다.

instruction set format

 

 

 

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 입니다. 

728x90
반응형