오래 못 할 짓 하지 않기
컴퓨터 구조 1 본문
구성 요소
● 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의 개수가 달라진다! ] 라는 걸 알면 된다!
출처 : 한동대학교 용환기 교수님 - 컴퓨터 구조
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
[ 컴퓨터 구조 ] 3. Instruction Set Completeness (0) | 2023.09.11 |
---|---|
[ 컴퓨터 구조 ] 2. Addressing Mode (0) | 2023.09.07 |
[ 컴퓨터 구조 ] 16. (Hazard) Flushing logic (0) | 2023.07.11 |
[ 컴퓨터 구조 ] 15. (Hazard) Data Forwarding logic (0) | 2023.07.10 |
[ 컴퓨터 구조 ] 14. Control Hazard solutions (0) | 2023.07.09 |