챕터3_명령어
💡
고급 언어와 저급 언어의 차이 이해
컴파일 언어와 인터프리터 언어의 차이 이해
명령어를 구성하는 연산 코드와 오퍼랜드
명령어의 주소 지정 방식
소스코드와 명령어
고급 언어와 저급 언어
고급 언어
- 사람을 위한 언어.
- 대부분의 프로그래밍 언어. 소스코드.
저급 언어
- 컴퓨터가 직접 이해하고 실행할 수 있는 언어.
- 명령어로 이루어짐.
→ 고급 언어인 소스코드가 실행되기 위하여 저급 언어인 명령어로 변환 필요
저급 언어
기계어
- 0과 1의 명령어 비트로 이루어진 명령어 모음
- 십육진수로도 표현
어셈블리어
- 오직 기계만을 위한 기계어를 사람이 읽기 편한 형태로 번역한 저급 언어
- 프로그램의 절차를 가장 근본적인 단계부터 추적, 관찰 가능
컴파일 언어와 인터프리터 언어
고급 언어가 저급 언어로 변환되는 방식 2가지
컴파일 언어
컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
변환 과정 → 컴파일
컴파일 수행 도구 → 컴파일러
변환된 코드 → 목적 코드
오류가 하나라도 있으면 컴파일 실패
인터프리터 언어
인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
예) Python
변환 실행 도구 → 인터프리터
오류가 있어도 그 전까지 수행
- 일반적으로 인터프리터 언어가 컴파일 언어보다 느림
- 프로그래밍 언어가 꼭 하나의 방식만으로 작동하지 않음
↓ 개인적인 호기심!!!
🤔C++는 컴파일 언어이다. 이를 인터프리트 가능할까?
→ 가능한 방법들이 존재.
1. 인터프리터 방식의 컴파일러 사용
2. C++를 인터프리터 언어로 변환하여 사용 (더 있을 수도..)
https://www.youtube.com/watch?v=6xzR-IR85wM
C++ interpreter를 소개하는 영상. (간단한 소개만 요약)
정확히는 JIT(Just In Time) compiler라고 함.
https://en.wikipedia.org/wiki/Just-in-time_compilation
위 1번 방법의 인터프리터 방식의 컴파일러.
C++는 고성능/저지연/높은 복잡도의 소프트웨어를 빌드하기 위한 컴파일 언어로,
자연스럽게 컴파일-링크-실행 주기에 묶여있다고 한다.
그럼에도 인터프리터를 만든 이유는, 특정 상황에서는 (특히 프로토타입) 인터프리트 방식이 더 적합하기 때문이다.
→ ARM64 CPU에서 작동하는 컴파일러 솔루션 연구 기술 발표 영상.
ARM64란?
워드가 64bit인 CPU 종류. 데스크탑에 사용되는 x64와는 다름.
ARM은 저전력 컴퓨터인 임베디드 컴퓨터에 사용되어 사용할 특정 프로그램에만 최적화된 CPU 아키텍처.
목적 파일 vs 실행 파일 그리고 링킹
목적 코드로 이루어진 파일 → 목적 파일
실행 코드로 이루어진 파일 → 실행 파일
목적 코드를 연결하는 작업 → 링킹
목적 코드 ——링킹——> 실행 파일
https://www.youtube.com/watch?v=6xzR-IR85wM
https://en.wikipedia.org/wiki/Just-in-time_compilation
Just-in-time compilation - Wikipedia
From Wikipedia, the free encyclopedia Dynamically compiling bytecode to machine code during runtime In computing, just-in-time (JIT) compilation (also dynamic translation or run-time compilations)[1] is compilation (of computer code) during execution of a
en.wikipedia.org
명령어의 구조
연산 코드와 오퍼랜드
명령어 = 연산 코드 필드 + 오퍼랜드 필드
명령어가 수행할 연산: 연산 코드/연산자
연산에 사용할 데이터/데이터 저장 위치: 오퍼랜드/피연산자
오퍼랜드
오퍼랜드가 담기는 영역: 오퍼랜드 필드/주소 필드
오퍼랜드의 수에 따른 명령어 → n-주소 명령어
0-주소 명령어, 1-주소 명령어, 2-주소 명령어…
연산 코드
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
주소 지정 방식
오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 이유?
제한된 명령어의 크기 내에서 다양한 정보를 표현하기 위하여.
정보의 가짓수는 해당 메모리/레지스터의 공간만큼 커짐
연산 대상 데이터가 저장된 위치 → 유효 주소
유효 주소를 찾는 방법 → 주소 지정 방식
즉시 주소 지정 방식
연산에 사용할 데이터를 직접 명시하는 방식
- 표현 가능한 데이터의 크기가 작아짐
- 찾는 과정이 없어 다른 방식들보다 빠름
직접 주소 지정 방식
유효 주소를 직접적으로 명시하는 방식
- 표현 가능한 유효 주소의 범위가 연산 코드의 비트 수만큼 줄음
간접 주소 지정 방식
유효 주소의 주소를 명시하는 방식
- 두 번의 메모리 접근 → 위 방식들보다 느림
레지스터 주소 지정 방식
연산에 사용할 데이터를 저장한 레지스터를 직접 명시하는 방식
- 직접 주소 지정 방식보다 빠름
- 표현할 수 있는 레지스터 주소 범위가 연산 코드의 비트 수만큼 줄음
레지스터 간접 주소 지정 방식
연산에 사용할 데이터는 메모리에, 그 주소를 저장한 레지스터를 명시하는 방식
- 메모리 접근 횟수가 1번으로 줄어듬 → 간접 주소 지정 방식보다 빠름
'스터디 > 컴퓨터구조' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조와 운영체제] 6_메모리와 캐시 메모리 (0) | 2025.04.18 |
---|---|
[혼자 공부하는 컴퓨터구조와 운영체제] 5_CPU 성능 향상 기법 (0) | 2025.04.04 |
[혼자 공부하는 컴퓨터구조와 운영체제] 4_CPU의 작동 원리 (0) | 2025.03.12 |
[혼자 공부하는 컴퓨터구조와 운영체제] 2_데이터 (0) | 2025.03.05 |
[혼자 공부하는 컴퓨터구조와 운영체제] 1_컴퓨터 구조 시작하기 (0) | 2025.03.05 |