오래 못 할 짓 하지 않기

컴퓨터 구조 1 본문

2학년 2학기/컴퓨터 구조

컴퓨터 구조 1

쫑알bot 2023. 9. 1. 19:23
728x90

구성 요소

● Machine Instruction

1. 프로세서의 언어
2. 어떤 연산을 수행할지 알려줌.

+ 프로그램 : 정해진 일을 수행하는 명령어의 순서

 

 

레지스터 

 

1. CPU에 있음

2. 임시 [ 명령어/데이터 ] 저장소

3. Main Memory보다 빠르지만 비싸다.

 빠른 이유: CPU에 있으니까 정보 가져오기 훨씬 가깝다.  

 

 

 

 

 

 

 

4. 종류 
   1) 일반적인 목적 = 계산하는 용도 ex) r0, r1
   2) 특수한 목적
= PC(program Counter) :  다음에 수행할 명령어의 주소를 갖고있다.

CPU에 있는 Register


AC(Accumulator)  : 명령어에 대한 결과를 잠시 갖고있는다.
- 아래 사진에서 오른쪽 사진에 있는 register가 AC임.

( sum = sum+ i 인 반복문 )

 

 

IR (Instruction Register) : 메모리에서 Fetch한 명령어를 갖고 있다.

Memory에서 가져온 명령어를 PC에 넣기 전에 어떤 명령어인지 보관 후 CPU에서 확인하는 register

 

 

 


Instruction Set Architecture

ISA

 

[ 여기서 우리가 control해야하는 것들 ]   <<뭔가 이거 4개 외워서 적으라고 할 것 같음


1. 프로세서 명령어의 세트 → 어셈블리어로 되어있는 명령어의 세트를 갖고있다.

 

2. 프로세서에 있는 레지스터에 접근 가능

  → 1) 프로그래머가 접근할 수 있는 레지스터가 몇 개인지

  → 2) 어떤 명령어가 어떤 레지스터를 쓰는지   정할 수 있음

 

3. 메모리와 데이터,명령어를 주고 받을 때 필요한 정보

  → 메모리 할당 ( 몇 비트로 할지 )

 

4. Interrupt 제어

 

 


Instruction의 종류는 어느 쪽에 더 친화적인지에 따라 나뉜다.

 

1. High Level Languages : 기계보단 사람에게 더 친화적인(알아듣기 쉬운) 언어이다.

   특징 ) Machine independent : C프로그램 똑같은 코드를 맥이든 Window든 그대로 실행 된다.

      + 같은 high level 코드라고 하더라도, 프로세서에 따라 다른 방식으로 컴파일 될 수 있다.

   ex) 맥과 윈도우의 컴파일 방식이 다르다.



 

2. Assembly Languages : Machine languages 를 기호화 하여 나타낸 언어

  특징 ) 각 명령어 한 줄이 Machine language 한 줄과 상응한다.
     + 각 프로세서들은 각자의 어셈블리 언어가 있다. ( SPARC , Pentinum )

 

 

3. Machine Languages : 기계에서 동작하는 언어 - binary code

  특징 ) 각 Binary 코드는 프로세서가 특정한 동작을 하도록 한다.

 

1 → 3 과정을 컴파일이라고 한다.

 

+ high level 명령 한 줄이, machine 언어 여러 줄이 될 수도 있다.

  

 

 


Instuction format

Assemly language는 바꿔진다. 그 중에 정해야하는 것들이 있음.

 

1. Instuction Length

: 명령어의 단위를 몇 비트로 할 것인가. 

   + 메모리 기본 단위 = 레지스터의 기본 단위 = 데이터를 주고받는 크기의 기본 단위 = word

   요새 word 사이즈는 32bits이다.

 

2. (주로) 명령어는 두 파트로 나뉜다) Opcode , Operands(address)  // ex) 2+3 => 
1) opcode : 수행될 명령어 // +

 

2) operands : 데이터가 어디에 있는지 // 2와3의 주소 + 어디에 저장될 지에 관한 주소

   i) operands의 갯수

   ii) 주소를 찍는 방법

 

 

 

(참고)

1. [ Opcode ] 가 k비트이면(k비트가 할당되면), 나타낼 수 있는 명령어의 수는 2^k 개 이다.

2. [ Operands = address part ] 가 m비트이면(m비트가 할당되면), 나타낼 수 있는 주소의 수는 2^m 개 이다.

 

 

 


Num of Operands

 

Three Operands

- ADD A,B,C
  
  Destination: A
  Sources : B and C
  
 (A ← B+C ) or ( C ← A+B )

 

Two Operands

- ADD A,B
  
  Destination: A
  Sources : A and B
  
 (A ← A+B )

 

  • One Operand 

1) AC(Accumulator)가 있을 때 = 반복문으로 결과값에 i를 더할 때 

2) LD (Load data) 로 데이터를 메모리에서 가져올 때

 

 

 

  • Zero Operand 도 가능하다 - Stack으로 구현함

 

 


Instruction bits 수 구하기

opcode 길이 : 5비트

address field : 12비트

 

1)  3 address inst = 5(opcode) + 3(주소 개수) * 12 = 41

2)  2 address inst = 5(opcode) + 2(주소 개수) * 12 = 29

3)  1 address inst = 5(opcode) + 1(주소 개수) * 12 = 17

 

Bus : CPU 와 Memory 사이에 데이터가 이동하는 경로

 

Bus가 크면( 데이터를 이동시키는 경로가 크면 ) Instruction이 줄어든다.

= 버스 한 대가 엄청나게 크면 버스 배차간격이 길어도 됨.

 


Exercise

[ Z = ( A + B ) / C ]를 0 ~ 3개의 Operand instruction 으로 표현하라. 

 

3 operand 

1) Z = A+B  →  ADD Z,A,B
2) Z = Z/C  →  DIV Z,Z,C

 

2 operands with MOV or CLR

MOV T,A
ADD T,B
DIV T,C
MOV Z,T

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

CLR Z
ADD Z A
ADD Z B
DIV Z C
1 operand with MOV  (AC에 대한 연산이라고 생각하면 됨)

MOV A
ADD B
DIV C
MOV Z

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

LOAD A
ADD B
DIV C
STORE Z
ZERO

PUSH A
PUSH B
ADD
PUSH C
DIV ( 걸 하면 밑에있는 A+B 가 C의 위쪽으로 감)
(DIV C를 하고 그 밑에 있는 걸 같이 연산한다 생각하면 됨)
POP Z

옮기는 법보다는 

[ Operand의 개수의 따라 instructions의 개수가 달라진다! ] 라는 걸 알면 된다!

 

 

출처 :  한동대학교 용환기 교수님 - 컴퓨터 구조