모든 소스코드(프로그래밍 언어)와 명령어로 변환된다.
고급 언어: 사람을 위한 언어 (프로그래밍 언어)
저급 언어: 컴푸터가 직접 이해하고 실행할 수 있는 언어
고급언어 -> 저급 언어 로 변환되어야 함
저급언어는 2가지 종류가 있다.
- 기계어: 0과 1의 명령어 비트로 이루어진 언어
이진수로 나열할 경우 너무 기러져 가독성을 위해 십육진수로 표현하기도 한다.
- 어셈블리어: 0과 1로 이루어진 기계어를 사람이 읽기 편한 형태로 변역한 언어
ex) 0101 0101 = push rbp ...
주로 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자들이 사용한다.
: 개발자들이 고급 언어로 작성한 소스코드는 결국 저급 언어로 변환되어 실행된다고 했는데, 이 변환 방식은 크게 두 가지가 있다.
: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
: 소스 코드를 한 줄씩 저급 언어로 변환하여 실행하는 도구
일반적으로 인터프리터 언어는 컴파일 언어보다 느리다.
프로그래밍 언어를 컴파일, 인터프리터 둘 중 하나로 단정 짓기는 어렵다. 웬만한 언어들은 둘 다 가능하기에 이러한 방식이 있다는 것을 이해하는 것이 중요
: 명령어는 연산 코드와 오퍼랜드로 구성되어있다.
: 유효 주소를 찾는 것
: 연산 코드에 사용할 데이터가 저장된 위치, 즉 연산의 대상이 되는 데이터가 저장된 위치
: 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
: 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
: 유효 주소의 주소를 오퍼랜드 필드에 명시한다.
: 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법
: 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
스택과 큐
- 스택: 한쪽 끝이 막혀 있는 통과 같은 저장 공간 ( LIFO )
PUSH, POP- 큐: 양쪽이 뚫려 있는 통과 같은 저장 공간 ( FIFO )