1. 소스 코드에서 명령어로
- 컴퓨터는 명령어를 이해한다.
- 소스 코드는 실행되기 전 명령어(+데이터)로 변환되어 실행된다.
- 소스 코드: 사람(개발자)가 이해하기 편한 언어 (고급 언어)
- 명령어와 데이터: 컴퓨터가 이해하기 편한 언어 (저급 언어)
- 즉, 고급 언어로 작성된 소스 코드는 내부적으로 저급 언어로 구성된 명령어와 데이터로 변환된다.
- 저급 언어의 두 종류
- 기계어 (machine code)
- 어셈블리어 (assembly language) : 기계어를 사람이 이해하기 편하게 변환시킨 언어
- 고급 언어에서 저급 언어로 변환되는 대표적 방식
- 컴파일
- 소스 코드 전체가 컴파일러에 의해 검사, 목적 코드로 변환
- C/C++, Rust
- 대표적인 컴파일러는 gcc, clang, Visual Studio, etc
- 인터프리트
- 소스 코드 한 줄씩 인터프리터에 의해 검사, 목적 코드로 변환
- Python, JavaScript
- 주의할 점
- 컴파일과 인터프리트는 방식의 차이가 있는 것이다. 완전히 분리되어 있는 개념은 아니다.
- 컴파일 언어의 특성과 인터프리트 언어의 특성을 모두 갖추 언어도 존재한다. (Java, Python)
- 컴파일
2.명령어의 구조
- 프로그램을 이루는 두 정보 (0과 1로 이루어진 정보)
- 명령어: 컴퓨터를 동작시키는 실질적인 정보
- 데이터: 명령어의 대상 (재료)
- 명령어
- 무엇을 대상으로 무엇을 수행하라 (= 오퍼랜드로 연산 코드를 수행하라)
- 오퍼랜드(operand): 명령어를 수행할 대상
==> 대상(데이터)이 직접 명시되기도 하고,
==> 대상의 위치가 명시되기도 함 - 연산 코드(op-code)
==> 오퍼랜드로 수행할 동작
3. 주소 지정
- 명령어의 길이는 한정되어 있기 때문에 일일이 지정하기보다 주소를 지정한다.
- 유효 주소
- 연산 코드에 사용할 데이터가 저장된 위치, 즉 연산의 대상이 되는 데이터가 저장된 위치
- 주소 지정
- 즉시 주소 지정
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 빠른 주소 지정 + 데이터 크게에 제
- 직접 주소 지정
- 오퍼랜드 필드에 유효 주소(연산에 사용될 데이터가 저장된 메모리 주소) 명시
- 오퍼랜드 필드로 표현 가능한 메모리 주소 크기에 제한
- 간접 주소 지정
- 오퍼랜드 필드에 유효 주소의 주소 명시
- 유효 주소 크게에 제한은 없으나, 속도가 비교적 느림
- 메모리에 2번 접근해야함 (따라서 직접 주소 지정보다 느리다.)
- 레지스터 주소 지정
- 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
- 레지스터 접근은 메모리보다 빠르다.
- 레지스터 간접 주소 지정
- 연산에 사용할 데이터를 메모리에 저장하고,
- 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시
- 메모리 접근은 한 번
- 즉시 주소 지정
'다양한 Dev. > cs 지식 정리' 카테고리의 다른 글
보조 기억 장치와 입출력 장치 (1) | 2023.12.17 |
---|---|
메인 메모리와 캐시 메모리 (0) | 2023.12.13 |
CPU (0) | 2023.12.09 |
데이터 (0) | 2023.12.07 |
컴퓨터 구조 (0) | 2023.12.05 |