1.8 KiB
1.8 KiB
ISA & Compiler Basics
Basic Computer
To get a task done by a general-purpose computer, we need:
- Program: A sequence of instructions
- Instruction set: A set of possible instructions
Von Neuman Architecture
Both Instructions and data are stored in the memory. Instructions dictate:
- which and how data are manipulated
- which instruction should be next
The memory is independent of the CPU.
How to load a program
*.c -(compiler)-> *.s: Assembly program
*.s -(assembler)-> *.o: Object file
*.o -(linker)-[with library(*.o)]-> *.exe: Executable
*.exe -(loader)-> to in memory
Program
Computer is essentially a complex state machine. programmer visible state:
- Memory
- Registers
- Program Counter
Instructions(Program) specify how to transform the values of programmer visible state.
Compiler
- Front-End
보이는 부분(HW에 신경을 안써도 됨)
- Back-End
HW에 밀접한 최적화를 해줌
General Structure of a Modern Compiler
- Front-End
- Lexial Analysis
- Syntax Analysis
- Semantic Analysis
- Code Generation - 1
- Back-End
- Control/DataFlow Analysis
- Optimization
- Code Generation - 2
이런 모듈식 구조는 다양한 언어와 하드웨어에 쉽게 적용할 수 있도록 도운다.
Lexical Analysis (Scanner)
프로그램을 token의 의미 단위로 나눔.
그리고 의미가 없는 단위를 지움.
보통 FSA로 구현함.
Syntax Analysis (Parser)
미리 있는 Grammar를 바탕으로 Syntax Correctness를 진행함.
Semantic Analysis
- identifier 정의 등
- 타입 체크
- 스코프 체크
- 오버로딩 모호화 해소
- IR로 변환
Optimization
최적화함
- 상수 최적화
- 안쓰는 변수
- loop에서 안바뀌는 변수
- 다시 똑같이 계산하는 변수 제거
- ...