명령어
소스코드와 명령어
고급 언어와 저급 언어
- 고급언어 : 사람을 위한 언어(C, C++, Java, Python 등 프로그래밍 언어)
- 저급언어 : 컴퓨터가 직접 이해하고 실행할 수 있는 언어로 고급언어로 작성된 소스코드가 실행되려면 저급 언어, 즉 명령어로 변환되어야 함
저급언어에는 기계어와 어셈블리어 두가지 종류가 있음
기계어
어셈블리어
- 0과 1로 표현된 기계어를 읽기 편한 형태로 번역한 언어
컴파일 언어와 인터프리터 언어
- 고급언어가 저급 언어로 변환되는 두 가지 방식 : 컴파일, 인터프리터
컴파일 언어 : 컴파일 방식으로 작동하는 언어
인터프리터 언어 : 인터프리트 방식으로 작동하는 언어
컴파일 언어
컴파일러에 의해 소스 코드 전체가 저급언어로 변환되어 실행되는 고급언어
- 오류가 하나라도 있으면 해당 소스 코드는 컴파일(저급언어로 변환)에 실패함
- 목적 코드 : 컴파일러를 통해 컴파일에 성공하여 저급 언어로 변환된 코드
인터프리터 언어
인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
- 오류가 있더라도 오류가 있는 소스 코드 구간을 만나기 전까지는 정상 실행 됨
명령어의 구조
연산코드와 오퍼랜드
명령어는 연산코드와 어퍼랜드로 구성되어 있음
- 연산코드(연산자) : 명령어가 수행할 연산(더해라, 빼라, 저장해라 등)
- 오퍼랜드(피연산자) : 연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치
주소지정방식
- 오퍼랜드 필드(피연산자 필드)에 데이터가 아닌 주소를 담는 방식
: 명령어의 길이의 제한 때문에 이 방식을 사용
즉시 주소 지정 방식
- 오퍼랜드 필드에 연산에 사용할 데이터를 직접 명시
직접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소(메모리의 주소)를 직접적으로 명시
간접 주소 지정 방식
- 메모리가 데이터의 주소를 갖고 있고 그 메모리의 주소를 명시(주소의 주소)
레지스터 주소 지정 방식
- 데이터가 저장되어 있는 레지스터의 주소를 명시(빠름)
레지스터 간접 주소 지정 방식
- 레지스터가 메모리의 주소를 갖고 있고 해당 레지스터의 주소를 오퍼랜드 필드에 명시하는 방식