구분 | 정의 | 특징 |
---|---|---|
고급 언어 | 인간이 이해하기 쉬운 추상화된 프로그래밍 언어 (C, Python, Java 등) | - 하드웨어 독립적- 복잡한 작업 간소화 |
저급 언어 | 컴퓨터가 직접 실행하는 언어 (기계어) | - 0과 1의 이진 코드- 특정 하드웨어에 종속적 |
어셈블리어 | 기계어와 1:1 대응되는 저급 언어 (MOV, ADD 등) | - 고급 언어와 기계어 사이 중간 계층- 하드웨어 제어 최적화 가능 |
컴파일 방식 | 전체 소스코드를 한 번에 저급 언어로 변환 | - 실행 전 모든 오류 검출- 실행 속도 빠름 (ex: C, C++) |
인터프리트 방식 | 소스코드를 한 줄씩 저급 언어로 변환하며 실행 | - 오류 발생 전까지 실행 가능- 실시간 디버깅 용이 (ex: Python, JavaScript) |
[ 연산 코드(Opcode) | 오퍼랜드(Operand) ]
ADD R1, 0x100
→ ADD
(연산 코드), R1
(목적지), 0x100
(메모리 주소)방식 | 동작 | 장점 | 단점 |
---|---|---|---|
즉시(Immediate) | 오퍼랜드 = 직접 데이터 | 속도 빠름 | 데이터 크기 제한 |
직접(Direct) | 오퍼랜드 = 유효 주소 | 간단한 구현 | 주소 표현 범위 제한 |
간접(Indirect) | 오퍼랜드 = 유효 주소의 주소 | 큰 주소 공간 지원 | 속도 느림 (메모리 2회 접근) |
레지스터(Register) | 오퍼랜드 = 데이터가 저장된 레지스터 | 빠른 접근 속도 | 레지스터 수 제한 |
레지스터 간접 | 레지스터에 저장된 주소로 데이터 접근 | 유연한 주소 지정 | 간접 방식과 동일한 속도 저하 |
구분 | 컴파일(Compile) | 인터프리트(Interpret) |
---|---|---|
변환 시점 | 실행 전 전체 코드 변환 | 실행 시 한 줄씩 변환 |
오류 처리 | 컴파일 실패 시 실행 불가 | 오류 라인 전까지 실행 가능 |
성능 | 실행 속도 빠름 | 실시간 변환으로 상대적 느림 |
대표 언어 | C, C++, Go | Python, JavaScript, Ruby |
test.i
(전처리된 소스코드)test.s
(어셈블리 코드)test.o
(목적 파일)test.exe
)