CS/Computer Architecture

[컴퓨터 구조] Instruction Set

Henu 2021. 6. 12. 15:37

 

컴퓨터의 Instruction set에 대해서 알아보자

 

 

Ex ) 3 + 6 = 9

Operands : '3', '6'

Operator : '+'

 

 

명령어 사이클의 기본 상태 Diagram을 알아보자

 

 

  1. Instruction fetch : 메모리에 있는 명령어를 가져오는 작업(Op code)
    • bring 대신 fetch를 사용한 이유 : CPU가 원하는 명령어의 주소를 메모리에 주고, 해당 주소에 있는 명령어를 받아오는 작업이기 때문에.
  2. Instruction operation decoding : 가져온 명령어를 해석한다.
  3. Operand의 주소를 계산해서 Operand를 메모리로부터 가져온다.
  4. Data Operation : 가져온 Operand와 Op code를 통해서 Data를 계산한다.
  5. Data의 계산 결과를 어디에 쓸건지 주소값을 계산해서 Data를 저장한다.

 

 

 

 

간단한 Instruction의 Format이다.

 


주소의 개수에 따른 명령어 분류

 

3addresses

Operand 1, Operand 2, Result

a = b + c;

 

2 addresses

Operand 1, Result

a = a + b

 

1 address

이미 2번째 주소를 알고 있는 경우

 

0 (zero) addresses

모든 주소는 암묵적으로 해석된다.

Uses a stack :  push a, push b, add, pop c (%rsp 라는 스택 포인터에 쓰는게 이미 지정되어 있음)

4bit processor도 0 address형식을 써서 만들 수 있다.

 


 

Systems Control

 

 

내부로 갈수록 우선순위가 높아진다.

-> 최고 우선순위 모드는 Kernel mode라고 할 수 있다.

 

 

 

Transfer of Control

 

Branch

ex) branch to x if result is zero

결과가 0일때 x로 넘어가라

 

Skip

ex) increment and skip if zero

ISZ R1

ISZ (Increment operand and Skip next instruction if the result is Zero)

위 코드의 R1레지스터의 초기값이 -10이라고 하자

그럼 ISZ 명령어에 따라서 R1값이 0이 될 때까지 반복하라는 의미이다.

 

 

 

Nested Procedure Calls

 

우리가 흔히 쓰는 함수의 사용 절차를 보여준다.

  1. Proc1이 호출되면 Proc1이 끝났을 때 실행해야할 코드의 주소인 4101을 Stack에 넣어준다.
  2. Proc1에서 Proc2를 호출하면 4601을 Stack에 넣어주고 Proc2를 호출한다.
  3. Proc2가 마무리되면 Stack의 Top에 있는 4601로 돌아가서 다시 Proc1의 코드를 수행한다.
  4. 그리고 다시 Proc2를 호출하고 4651을 Stack에 넣어준다.
  5. 반복

 

위와 같이 되돌아갈 주소를 기억하기 위해서 Stack을 사용한다.

 

위 Procedure의 Stack현황을 보여준다.

 


Byte Order

 

Big-endian

메모리의 낮은 주소부터 시작해서 입력된다

 

 

 

Little-endian

메모리의 높은 주소부터 시작해서 입력된다.

 

 

 

Big-endianLittle-endian의 차이를 알 수 있다.

address mapping방식에서 확연한 차이가 존재한다.

 

 

Intel processor - Little-endian

Internet - Big-endian