3-1. 소스 코드와 명령어
고급 언어와 저급언어
- 고급 언어 : 사람을 위한 언어. 대부분의 프로그래밍언어
- 저급 언어 : 컴퓨터가 직접 이해하고 실행할 수 있는 언어.
고급 언어로 작성된 소스코드가 실행되려면 반드시 저급언어, 즉 명령어로 변환되어야 한다.
기계어 : 0과 1의 명령어 비트로 이루어진 언어.
어셈블리어 : 0과 1로 표현된 명렁어(기계어)를 읽기 편한 형태로 번역한 언어.
=> 하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 개발자들은 어셈블리어 이해가 필요!
어셈블리어를 읽으면 컴퓨터가 프로그램을 어던 과정으로 실행하는지, 즉 프로그램이 어떤 절차로 작동하는 지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰 가능.
컴파일 언어와 인터프리터 언어
컴파일 언어 : 컴파일 언어로 작성된 소스 코드는 코드 전체가 저급 언어로 변환되어 실행되는 고급언어. ex) C
컴파일 : 컴파일 언어로 작성된 소스 코드는 코드 전체가 저급 언어로 변환되는 과정을 거친다.
목적코드 : 컴파일이 성공적으로 수행되면 개발자가 작성한 소스 코드는 컴퓨터가 이해할 수 있는 저급 언어로 변환. 컴파일러를 통해 저급 언어로 변환된 코드를 목적코드라고한다.
인터프리터 언어 : 소스 코드를 한 줄씩 차례로 실행.
인터프리터 : 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구.
인터프리터 언어는 N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 올바르게 수행.
인터프리터 언어는 컴파일 언어보다 느리다.
3-2. 명령어의 구조
연산 코드와 오퍼랜드
명령어는 연산코드와 오퍼랜드로 구성되어 있다.
- 연산코드 : 명령어가 수행할 연산 ex) 더해라, 뺴라, 저장해라
- 오퍼랜드 : 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치 ex) 100과 120을, 메모리 32번지 안의 값과 메모리 33번지 안의 값을, 10을 메모리 128번지에
오퍼랜드
오퍼랜드 필드에는 숫자나 문자와 같이 연산에 ㅅ용할 데이터를 직접 명시하기 보다는 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담긴다.
오퍼랜드 필드 = 주소필드
- 오퍼랜드가 하나도 없는 명령어 : 0-주소 명령어
- 오퍼랜드가 하나인 명령어 : 1-주소 명령어
- 오퍼랜드가 두 개인 명렁어 : 2-주소 명렁어
- 오퍼랜드가 세 개인 명렁어 : 3-주소 명령어
연산코드
데이터 전송
- MOVE : 데이터를 옮겨라
- STORE: 메모리에 저장하라
- LOAD(FETCH):메모리에서 CPU로 데이터를 가져와라
- PUSH:스택에 데이터를 저장하라
- POP : 스택의 최상단 데이터를 가져와라
산술/논리 연산
- ADD / SUBTRACT / MULTIPLY / DIVIDE : 덧셈 / 뺼셈 / 곱셉 / 나눗셈 / 을 수행하라
- INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
- ADD / OR / NOT : AND / OR / NOT 연산을 수행하라
- COMPARE : 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라
제어흐름변경
- JUMP : 특정 주소로 실행 순서를 옮겨라
- CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
- HALT : 프로그램의 실행을 멈춰라
- CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
- RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라
입출력 제어
- READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
- WRITE(OUTPUT):특정 입출력 장치로 데이터를 써라
- START IO : 입출력 장치를 시작하라
- TEST IO : 입출력 장치의 상태를 확인하라
주소 지정 방식
오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다.
유효 주소 : 연산의 대상이 되는 데이터가 저장된 위치
주소 지정 방식 : 연산에 사용할 데이터 위치를 찾는 방법
- 즉시 주소 지정 방식 : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식. 데이터 크기가 작아지는 단점이 있지만, 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없기 때문에 빠르다.
- 직접 주소 지정 방식 : 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식.
- 간접 주소 지정 방식 : 유효주소의 주소를 오퍼랜드 필드에 명시.
- 레지스터 주소 지정 방식 : 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법.
- 레지스터 간접 주소 지정 방식 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법.
스택과 큐
스택 : 한쪽 끝이 막혀 있어서 막혀있지 않은쪽으로 데이터를 차곡차곡 저장. 저장한 자료를 빼낼 때는 마지막으로 젖아한 데이터부터 빼낸다.
LIFO : 1 - 2 - 3 - 4 - 5 => 5 - 4 - 3 - 2 - 1
PUSH : 스택에 새로운 데이터를 저장하는 명렁어
POP : 스택에 저장된 데이터를 꺼내는 명렁어
큐 : 양쪽이 뚫려 있는 저장공간. 한쪽으로는 데이터를 저장하고, 다른 한쪽으로는 먼저 저장한 순서대로 데이터를 빼낸다.
FIFO : 큐의 자료구조. 선입선출
'CS공부🖥️ > 운영체제' 카테고리의 다른 글
혼공 컴+운 chapter6. 메모리와 캐시 메모리 (0) | 2025.01.21 |
---|---|
혼공 컴+운 chapter5. CPU 성능 향상 기법 (1) | 2025.01.16 |
혼공 컴+운 chapter.04 CPU의 작동원리 (0) | 2025.01.15 |
혼공 컴+운 chapter2. 데이터 (0) | 2025.01.07 |
혼공 컴+운 chapter1. 컴퓨터 구조 시작하기 (1) | 2025.01.06 |