고수준 언어에서 프로그램 실행까지
-고수준 언어-
사람이 표현하는 방식에 가까운 용어로 계산과정 작성 가능.
작성된 코드는 번역기 프로그램을 통해 대상 프로세서의 어셈블리 언어로 된 명령어로 변환된 다음,
어셈블러에 의해 비트로 변환되어 메모리에 로드되고 실행.
여기서 번역기 프로그램은 보통 컴파일러.
컴파일러 :
고급 언어로 작성된 프로그램을 번역해서 기계어로 된 프로그램을 만들어주는 번역기.
우리가 아는 C, C++, Java, Javascript, Python 등등의 프로그래밍 언어
ex) A = B + C
고수준 언어에서는 이 식을 'B와 C라는 메모리 위치에서 값을 가져와 더한 다음 A라는 메모리 위치에 결과를 저장하라'.
'='는 같다의 의미가 아닌 '대체하다', '저장하다', '위치하다'라는 뜻.
장점 :
- 고수준 언어는 사람 생각의 방식에 더 가까워 배우고 사용하기 용이함.
- 고수준 언어에서는 프로그램을 효율성을 위한 특정 프로세서의 명령어 레퍼토리를 알아야 할 필요X.
따라서 빠른 프로그래밍이 가능하게 함.
- 고수준 언어로 작성된 프로그램은 특정 아키텍처에 종속되지 않음. 그래서 같은 프로그램이 여러 아키텍처상에서 실행 될 수 있고, 코드를 변경할 일이 없으면, 다른 컴파일러로 컴파일 하면 됨.
- 프로그램을 한 번만 작성하면 다양한 컴퓨터에서 실행이 가능.
- 고수준 언어에서 다른 언어로 컴파일 하는 단계에서 명백한 에러를 점검해줌.
-컴파일 언어-
- 소스코드를 목적코드로 옮기는 것
- 목적코드는 컴파일러나 소스코드 파일을 컴파일 해서
기계어를 CPU/메모리를 통해 읽어 실행하는 방식으로 동작하는 언어
- 번역과 실행이 따로 이루어짐.
장점 :
- 규모가 큰 프로그램은 컴파일 시 오래 걸릴 수 있지만,
컴파일 후에는 모든 소스코드가 기계어로 변환되어 있어 실행 시간 빠름.
-어셈블러와 과정-
어셈블러는 어셈블리어로 작성된 원시 프로그램을 기계어로 된 목적 프로그램으로 어셈블하는 언어 번역 프로그램.
1. 어셈블리어로 작성된 원시 프로그램을 목적프로그램으로 어셈블 하는 과정은 크게 2단계(Pass)로 나누어서 수행.
2. 두 단계(Pass)를 사용하면 기호를 정의하기 전에 사용할 수 있는 프로그램 작업이 용이합니다.
-어셈블러의 종류-
1. 단일 패스 어셈블러 :
원시 프로그램을 하나의 명령문씩 읽는 즉시 기계어로 번역하여 목적프로그램으로 만듦.
2. 이중 패스 어셈블러 :
원시 프로그램을 앞에서부터 읽어 1단계의 작업을 수행한 뒤 처음부터 다시 읽으면서
1단계에서 수행한 결과를 사용하여 완전한 목적 프로그램을 만듦.
3. 크로스 어셈블러 :
현재 사용하는 컴퓨터와는 다른 명령 형태로 동작하는 컴퓨터에서 사용할 프로그램을 어셈블 할 때 사용되는 어셈블러를 말하며,
현재 어셈블하는 컴퓨터가 아닌 어셈블된 프로그램을 '실행시킬 컴퓨터에 맞게 목적 프로그램을 생성'.
-어셈블리어 :
컴퓨터가 알아들을 수 있는 기계어와 1대1로 대응이 되는 컴퓨터 프로그래밍의 저급 언어.
컴퓨터는 0과 1만을 인식할 수 있는데, 이를 사람이 이해하기 쉽게 변형하여 만든 언어가 어셈블리어.
기계어와 가장 가깝기 때문에 컴퓨터 구조를 이해하기 용이한 장점이 있지만, 길고 복잡하며 CPU마다 언어가 다르다는 단점.
또한, 어셈블리어로 작성된 프로그램은 어셈블러라는 프로그램에 의해서 기계어로 변환.
어셈블리어의 명령어 3가지 형식 :
Label, OP, Operand.
Label : 데이터를 기억할 기억장소, 또는 분기할 위치, 기호 상수 등에 대한 기호를 기술 담당으로 생략 가능.
OP : 명령어(OP-Code)를 기술 담당.
Operand : OP-code가 연산을 수행하기 위한 연산의 대상이 되는 Literal(상수,데이터)나 주소, Register 번호 등의 기술 담당.