1. 소스 코드와 명령어
- 모든 소스코드는 컴 내부에서 명령어로 변환됨
- 이 언어가 어떻게 명령어가 되어 실행되는가?
1.1. HighLevel 언어와 LowLevel언어
고급 언어
- 사람을 위한 언어
- 대부분의 프로그래밍 언어가 고급언어임
저급 언어
- 컴이 직접 이해, 실행 가능한 언어
- 기계어
- 기계어는 0, 1의 명령어 비트로 이루어진 언어임
- 즉, 기계어는 0, 1로 이뤄진 명령어 모음
- 어셈블리어
- 기계어를 읽기 편한 형태로 번역한 언어
1.2. 컴파일 언어와 인터프리터 언어
- 고급 언어는 어떻게 저급 언어로 변환되는가?
- 컴파일 방식
- 인터프리트 방식
컴파일 언어
- 컴파일 언어는 컴파일러로 소스코드 전체가 저급언어로 변환되어 실행되는 고급언어임
- 대표적 예시 : C언어
- 컴파일러가 소스 코드(고급언어) → 목적코드(저급언어)로 바꿔주는 게 컴파일임
- 오류가 1개라도 있으면 컴파일 실패
인터프리터 언어
- 인터프리터로 소스코드가 한 줄씩 실행되는 고급언어임
- 대표적 예시 : 파이썬
- cf) 컴파일언어는 소스 코드 전체가 저급 언어로 변환됨
- 인터프리터 언어는 소스 코드를 한 줄씩 실행해서 소스코드 N번째에 문법 오류가 있더라도 N-1번째까지는 올바르게 수행함
1.3. 목적 파일과 실행 파일
- 목적 파일?
- 목적 코드로 이루어진 파일
- 실행파일?
- 실행 코드로 이루어진 파일
- 예시: .exe가 대표적인 실행파일임
- 목적코드가 실행 파일이 되려면 링킹 작업 필요
2. 명령어의 구조
- 명령어의 구조와 주소 지정 방식 익히기
- 명령어의 생김새와 작동 원리 이해하기
2.1. 연산 코드와 오퍼랜드
- 명령어는 연산코드와 오퍼랜드(피연산자)로 구성
- 좀 더 쉽게 명령어는 연산자와 피연산자로 구성
오퍼랜드
- 의미
- 연산에 사용할 데이터
- 또는 연산에 사용할 데이터가 저장된 위치
- 피연산자라고도 부름
- 오퍼랜드 필드에는 연산에 사용할 데이터를 직접 명시하기보단 많은 경우 데이터가 저장된 위치를 명시함
- 오퍼랜드는 명령어 안에 하나도 없을 수도, 한 개만 있을 수도, 2-3 처럼 여러 개 있기도 함
- 얘네를 0-주소명령어, 1-주소명령어, 2-주소명령어, 3-주소명령어라고 부름
연산코드
- 의미
- 명령어가 수행할 연산
- 연산자라고도 부름
- 연산코드의 4가지 유형
- 데이터 전송
- 산술/논리연산
- 제어 흐름 변경
- 입출력 제어
- 데이터 전송
- MOVE : 데이터를 옮겨라
- STORE: 메모리에 전송해라
- LOAD(FETCH): 메모리에서 CPU로 데이터 가져와라
- PUSH: 스택에 데이터 저장해라
- POP: 스택의 최상단 데이터 가져와라
- 산술/논리연산
- ADD / SUBTRACT/ MULTIPLY/ DIVIDE
- INCREMENT / DECREMENT
- AND / OR /NOT: AND/ OR / NOT
- COMPARE
- 제어 흐름 변경
- JUMP: 특정 주소로 실행 순서 옮겨
- CONDITIONAL JUMP : 조건에 부합 시 특정 주소로 실행 순서 옮겨
- HALT : 프로그램 실행 멈춰
- CALL: 되돌아올 주소 저장하고 특정 주소 실행 순서 옮겨
- RETURN : CALL 호출 시 저장했던 주소로 돌아가
- 입출력 제어
- READ(INPUT): 특정 입출력 장치로부터 데이터 읽어라
- WRITE(OUTPUT) : 특정 입출력 장치로 데이터 써라
- START IO : 입출력 장치 시작
- TEST IO : 입출력 장치 상태 확인
2.2. 주소 지정 방식
- 주소 지정 방식?
- 유효 주소를 찾는 방법
- 즉, 연산에 사용할 데이터 위치를 찾는 방법
- 유효 주소?
- 연산의 대상이 되는 데이터가 저장된 위치
- 오퍼랜드 필드에 메모리나 레지스터 주소를 담는 경우가 많음
- 근데 왜?
- 명령어 길이 때문
대표적 주소 지정 방식 5가지
- 즉시 주소 지정 방식
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 간단한 형태의 주소 지정 방식
- 장점 : 빠름. 연산에 사용할 데이터를 메모리나 레지스터로 부터 찾는 과정 없어서.
- 단점: 표현할 수 있는 데이터의 크기가 작아짐
- 직접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소를 직접적으로 명시
- 장점: 즉시 주소 지정 방식 보다는 오퍼랜드 필드에서 표현할 수 있는 데이터 크기가 커짐
- 단점 : 여전히 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어듦
- 간접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 장점 : 앞의 두 방식 보다 표현할 수 있는 유효 주소의 범위가 넓음
- 단점 : 두번의 메모리 접근 필요해 즉시 주소 지정 방식과 직접 주소 지정 방식 보다 느림
- 레지스터 주소 지정 방식
- 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
- 일반적으로 CPU 외부에 있는 메모리 접근하는 것 보단 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠름
- 장점: 직접 주소 지정 방식보다 빠르게 데이터에 접근 가능
- 장점: 직접 주소 지정 방식처럼 표현할 수 있는 레지스터 크기에 제한이 생김
- 레지스터 간접 주소 지정 방식
- 연산에 사용할 데이터를 메모리에 저장, 그 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
- 장점: 간접 주소 지정방식과 비슷하지만, 메모리 접근 횟수가 한번으로 줄어듦!
'운영체제' 카테고리의 다른 글
[컴퓨터 구조] 명령어 사이클과 인터럽트 (0) | 2024.08.09 |
---|---|
[컴퓨터 구조] 레지스터 (0) | 2024.08.08 |
[컴퓨터 구조] CPU 작동 원리1 : ALU (1) | 2024.08.06 |
[컴퓨터 구조] 2진수, 16진수, 인코딩 (0) | 2024.07.31 |
[컴퓨터 구조] CPU, 메모리, 시스템버스, 보조기억장치 (0) | 2024.07.29 |