📑 본 글은 <혼공컴운>을 읽고 정리한 글입니다.

1. 소스 코드와 명령어
1-1. 고급 언어와 저급 언어
- 기계어
- 저급 언어
- 컴퓨터가 직접 이해하고 실행할 수 있는 언어
- 어셈블리어
- 고급 언어
- 사람을 위한 언어
- 저급 언어로 변환되어 실행된다.
1-2. 컴파일 언어와 인터프리터 언어
고급 언어가 저급 언어로 변환되는 방식
- 컴파일 언어
- 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 목적 코드 : 컴파일러를 통해 저급 언어로 변환된 코드
- 소스 코드 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음
- 인터프리터 언어
- 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
- 소스 코드 인터프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행됨
목적 파일 → 링킹 → 실행 파일
2. 명령어의 구조
2-1. 연산 코드와 오퍼랜드
명령어는 연산 코드와 오퍼랜드로 구성되어 있다.
- 연산 코드 : 명령어가 수행할 연산
- 연산 코드 유형 4가지
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
- 오퍼랜드(operand) : 연산에 사용할 데이터 / 데이터가 저장된 위치
- 오퍼랜드 필드에는 주로 메모리 주소나 레지스터 이름이 담긴다.
- 그래서 주소 필드라고 부르기도 한다.
- 오퍼랜드 개수에 따라 0-주소 명령어, 1-주소 명령어, 2-주소 명령어, 3-주소 명령어라고 한다.
2-2. 주소 지정 방식
오퍼랜드 필드에 데이터가 아닌 메모리나 레지스터의 주소를 저장하는 이유
- 명령어의 길이가 한정적이기 때문
- 메모리 주소나 레지스터의 주소를 저장하면 데이터의 크기는 하나의 주소에 저장할 수 있는 공간만큼 커짐
- 유효 주소 : 연산의 대상이 되는 데이터가 저장된 위치
주소 지정 방식 : 연산에 사용할 데이터 위치를 찾는 방법
- 즉시 주소 지정 방식
- 데이터를 오퍼랜드 필드에 직접 명시
- 오퍼랜드 필드 → 데이터
- 데이터 크기가 작아진다. / 다른 방식들보다 빠르다.
- 직접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
- 오퍼랜드 필드 → 유효 주소 → 메모리 내 데이터
- 유효 주소를 표현할 수 있는 범위가 연산 코드의 길이만큼 줄어든다.
- 간접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 오퍼랜드 필드 → 유효 주소의 주소 → 메모리 내 유효 주소 → 메모리 내 데이터
- 유효 주소의 범위가 넓어진다. / 두 번의 메모리 접근 필요 → 느리다.
- 레지스터 주소 지정 방식
- 오퍼랜드 필드에 레지스터를 직접 명시
- 오퍼랜드 필드 → 레지스터 이름 → 레지스터 내 데이터
- 레지스터는 CPU 내부에 있기 때문에 직접 주소 지정 방식보다 더 빠르다.
- 표현할 수 있는 레지스터 크기에 제한이 생길 수 있다.
- 레지스터 간접 주소 지정 방식
- 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
- 오퍼랜드 필드 → 레지스터 이름 → 레지스터 내 유효 주소 → 메모리 내 데이터
- 메모리 접근 1회 → 간접 주소 지정 방식보다 빠르다.