반응형
03-1. 소스 코드와 명령어
고급 언어와 저급 언어
- 고급 언어: 사람을 위한 언어
- 저급 언어: 컴퓨터를 위한 언어
- 예) 기계어, 어셈블리어
- 기계어: 0과 1의 명령어 비트로 이루어진 언어
고급 언어로 작성된 소스 코드는 반드시 저급 언어(명령어)로 변환되어야 한다
컴파일 언어와 인터프리터 언어
- 컴파일 방식: 소스 코드 전체를 저급 언어로 변환 -> 목적코드 생성
- 인터프리터 방식: 소스 코드를 한 줄씩 실행
목적 파일 vs 실행 파일
- 목적 파일: 목적 코드로 이루어진 파일
- 실행 파일: 실행 코드로 이루어진 파일
- 링킹: 목적 코드를 실행 코드로 변환하는 과정
03-2. 명령어의 구조
연산 코드와 오퍼랜드
- 명령어 = 연산 코드 + 오퍼랜드
- 연산 코드 (== 연산자): 명령어가 수행할 연산
- 오퍼랜드 (== 피연산자): 연산에 사용할 데이터, 데이터가 저장된 위치
- 연산 코드 필드: 연산 코드가 담기는 영역
- 오퍼랜드 필드: 오퍼랜드가 담기는 영역
오퍼 랜드
연산에 사용할 데이터, 데이터가 저장된 위치
오퍼랜드 필드 == 주소 필드
- 0-주소 명령어: 오퍼랜드 0개인 명령어
- 1-주소 명령어: 오퍼랜드가 1개인 명령어
0~3까지 존재
연산 코드
명령어가 수행할 연산
- 데이터 전송
- move, store, load(fetch), push, pop
- 산술/논리 연산
- add/substract/multiply/divide
- increment/decrement
- and/or/not
- compare
- 제어 흐름 변경
- jump
- conditional jump
- halt
- call
- return
- 입출력 제어
- read(input)
- write(output)
- start io
- test io
주소 지정 방식
오퍼랜드와 연산 코드를 담을 수 있는 공간은 한정되어 있음
오퍼랜드의 값을 다 담기 보다 주소를 활용하여 데이터의 위치를 가르킴
- 유효 주소: 연산의 대상이 되는 데이터가 저장된 위치
- 주소 지정 방식: 연산에 사용된 데이터의 위치를 주소를 사용하여 찾는 방법
다양한 주소 지정 방식
즉시 주소 지정 방식
- 연산에 사용할 데이터 저장
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
연산에 사용할 데이터들을 메모리, 레지스터로부터 찾는 과정이 없기에 다른 방식들 보다 빠르다
직접 주소 지정 방식
- 유효 주소 (메모리 주소) 저장
오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
즉시 주소 지정 방식보다 표현할 수 있는 데이터의 크기가 커짐
그러나 여전히 오퍼랜드 필드의 길이가 연산 코드의 길이만큼 짧아져 표현할 수 있는 유효 주소에 제한이 있다
간접 주소 지정 방식
- 유효 주소의 주소 저장
유효 주소의 주소를 오퍼랜드 필드에 명시
표현할 수 있는 유효 주소의 범위가 직접 주소 지정 방식 보다 넓어짐
그러나 두 번의 메모리 접근이 필요하여 앞서 설명한 방식들보다 느림
레지스터 주소 지정 방식
- 유효 주소 (레지스터 이름) 저장
직접 주소 지정 방식과 유사하게 레지스터를 오퍼랜드 필드에 직접 명시
cpu 외부 메모리에 접근하는 것 보다 빠름
표현할 수 잇는 레지스터 크기에 제한이 생길 수 있음
레지스터 간접 주소 지정 방식
- 유효 주소를 저장한 레지스터 저장
연산에 사용될 데이터를 메모리에 저장하고
그 주소를 레지스터에 담고
그 주소를 오퍼랜드 필드에 저장하는 방식
간접 주소 지정 방식 보다 바르다
+) 스택과 큐
스택 (stack)
한쪽 끝이 막혀있는 저장 공간
막혀 있지 않은 부분으로 데이터를 저장하고, 데이터를 빼내는 방식
-> LIFO 방식: 나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식(후입선출)
in ↓↓ ↑↑out |
---|
data 2 |
data 1 |
data 0 |
push # 새로운 데이터 저장
pop # 데이터 출력 (가장 마지막에 넣은 데이터 출력)
큐 (queue)
양쪽이 뚫려 있는 저장 공간
한쪽으로 데이터를 저장하고, 다른쪽으로 데이터를 꺼내는 방식
-> FIFO 방식: 가장 먼저 저장된 데이터부터 빼내는 데이터 관리 방식 (선입 선출)
↓↓ in ↓↓ |
---|
data 2 |
data 1 |
data 0 |
↓↓ out ↓↓ |
push # 새로운 데이터 저장
pop # 데이터 출력 (가장 처음에 넣은 데이터 출력)
반응형
'cs > [OS] 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
[혼공 컴운] chapter 05. CPU 성능 향상 기법 (0) | 2024.01.12 |
---|---|
[혼공컴운] chapter 04. CPU의 작동 원리 (2) | 2024.01.10 |
[혼공학습단 11기] 혼공컴운 1주차 미션 (2) | 2024.01.05 |
[혼공컴운] chapter 02. 데이터 (0) | 2024.01.05 |
[혼공컴운] chapter 01. 컴퓨터 구조 시작하기 (2) | 2024.01.05 |