프로그래밍 소스코드(고급언어)는 컴퓨터 내부에서 명령어로 변환됨.
0과 1로 이루어진 명령어, 사람이 읽을 수 있게 표현된 어셈블리어
고급언어를 저급언어로 변경할 때 컴파일 방식과 인터프리트 방식이 사용된다.
고급언어들은 이 변환 병식에 따라 컴파일 언어와 인터프리터 언어로 나눌 수 있다
소스 코드 전체를 목적 코드(저급 언어)로 변환하는 방식
컴파일러는 소스 코드 전체에 오류가 없는지 살펴본 후 컴파일한다.
따라서 오류가 하나라도 있으면 컴파일을 할수 없음
ex) C언어
목적코드로 이루어진 목적 파일은 링킹 과정을 거쳐 실행파일이 된다.
링킹 : A파일 소스코드에서 B파일 소스코드를 가져다 썼을때, 두 파일의 목적 파일을 연결해주는 것
소스코드가 한 줄씩 차례로 변환되며 실행됨
소스코드 N번째 줄에 오류가 있어도 N-1번째 줄까지는 실행됨
일반적으로 컴파일 언어보다 실행 속도가 느리다
연산 코드 (연산자) | 오퍼랜드 (피연산자) |
---|
연산 코드 | 오퍼랜드 | 오퍼랜드 | |
---|---|---|---|
명령어1 | 더하라 | 메모리 1번지 값과 | 메모리 2번지 값을 |
명령어2 | 저장하라 | 10을 | 메모리 3번지 값에 |
연산에 사용할 데이터 (또는 데이터의 주소)
주로 메모리 주소나 레지스터 주소가 담기므로 주소필드 라고 부르기도 함
명령어 안에 오퍼랜드는 N (0 <= N)
개가 올 수 있음 (N-주소 명령어)
명령어가 수행할 연산
move, store, load, push, pop
add/sub/mul/div, increment, decrement, and/or/not, compare
jump, conditional jump, halt, call(함수호출), return
read, write, start io, test io
데이터 대신, 데이터의 유효주소를 오퍼랜드에 포함하면 오퍼랜드의 길이를 줄일 수 있다.
방식 | 특징 |
---|---|
즉시 주소 지정 | 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시 오퍼랜드 길이가 늘어나 갯수가 줄어듦, 속도는 빨라짐 |
직접 주소 지정 | 유효 주소를 직접 명시 오퍼랜드 갯수가 많다면 여전히 한계 존재 |
간접 주소 지정 | 유효 주소의 주소를 명시 표현할 수 있는 유효 주소의 범위가 넓어짐, 두번의 메모리 접근이 필요해서 느림 |
레지스터 주소 지정 | 데이터를 저장한 레지스터를 오퍼랜드 필드에 명시 메모리에 접근하는 것 보다 CPU 내부의 레지스터에 접근하는게 빠름 |
레지스터 간접 주소 지정 | 데이터의 (메모리)유효주소를 저장한 레지스터(CPU)를 명시 메모리에 접근하는 횟수가 1번이므로 간접주소지정 보다 빠름 |