엔지니어가 되고 싶은 공돌이
05. Program and Instruction Set 본문
5. 1. Program
- Program: Data와 Instructions의 집합.
- CPU(Central Processing Unit)
1) PC(Program Counter): 다음 실행할 명령어의 주소를 저장.
IA-32: EIP , x86-64: RIP.
2) Register File: 많은 Program Data를 저장.
3) Condition Codes: 최근에 수행한 산술연산의 Status Information을 저장.
- ISA(Instruction Set Architecture): 명령어 집합으로, 명령어를 구성하는 필드의 수, 필드당 비트를 지정.
ISA는 software와 hardware 사이에서 interface역할을 수행하며,
ISA에 따라서 명령어 해석 방식, 레지스터 종류와 개수가 달라질 수 있습니다.
- gcc -0 p1.c p2.c -o p : -0은 최적화를 사용, 최종결과를 file p에 넣겠다는 의미.
1) text : C Program (p1.c p2.c) -> Compiler(gcc -S) ->
2) text: Asm Program(p1.s p2.s) -> Assembler(gcc or as) ->
3) binary: Object Program(p1.o p2.o) -> Linker(gcc or ld) ->
4) binary: Executable Program(p).
- Linker: 파일간의 references를 처리.
static run-time libraries와 결합.
일부 라이브러리는 동적으로 연결.
- Disassembling: 기계어 파일을 어셈블리 파일로 대략적으로 나타내며, 기계어파일 검사에 유용합니다.
5. 2. CISC and RISC
1) CISC(Complex Instruction Set Computer): 명령어 위주로 설계된 CPU. [x86]
Pros: 명령어가 많아 호환성이 좋으며,
명령어 몇 개 만으로 작업을 수행할 수 있어 메모리 공간을 효율적으로 사용할 수 있으며,
명령어의 형태와 크기가 가변적입니다.
Cons: 실행시간이 일정하지 않고,
복잡하며,
속도가 상대적으로 느리고,
전력소모가 많습니다.
무엇보다 파이프라이닝을 수행하기가 매우 불리하다는 큰 단점을 가지고 있습니다.
2) RISC(Reduced Instruction Set Computer): CISC보다 명령어 종류가 적고 짧게 규격화된 CPU.
Pros: 명령어 길이가 정해져 있어 파이프라이닝이 유리하고,
속도가 빠르며,
전력소모가 적습니다.
Cons: 많은 레지스터가 필요하고,
CISC보다 더 많은 명령어가 필요합니다.
CISC | RISC |
가변길이 명령어 | 고정길이 명령어 |
상대적으로 다양한 명령어 | 상대적으로 단순한 명령어 |
실행되는 명령어의 수가 적음 | 실행되는 명령어의 수가 많음 |
파이프라이닝 어려움 | 파이프라이닝 쉬움 |
느린 처리속도 | 빠른 처리속도 |
전력소모 많음 | 전력소모 적음 |
명령어가 여러 클럭에 걸쳐 실행 | 명령어가 1클럭 내외에 실행 |
5. 3. IA-32
- IA-32: intel의 x86 – 32 CPU에서 사용하는 ISA.
CISC를 사용합니다.
- intel은 이전 instrcution set에 대한 호환성을 제공하기 위해,
새로 CPU를 만들어도 옛날 instrcution set을 변경하지 않으므로,
시간이 지날수록 instrcution set은 증가하였습니다.
- General-Purpose Registers
1) EAX: Arithmetic Opeartions and Logical Operations의 함수의 반환값을 저장.
2) EBX: Memory Address를 저장. / 다른 레지스터가 부족할 때 사용.
3) ECX: 루프문 같은 곳의 Counting 역할.
4) EDX: Data를 저장 / 다만, EAX처럼 리턴값의 용도로는 사용되지 않음.
5) ESI, EDI: Source Index, Destination Index / String, Repetitive Data를 처리 또는 이동에 사용.
6) ESP: Stack Pointer / 스택을 어디까지 썼는지 가리키는 포인터.
7) EBP: Stack Base Pointer / 스택의 시작지점.
- EFLAGS Register
1) CF: Carry의 여부.
2) ZF: 연산결과가 Zero인지의 여부.
3) SF: 연산결과가 Positive Nubmer인지, Negative Number 인지의 여부.
4) OF: Overflow가 있는지 없는지의 여부.
- EIP(PC): 다음 실행할 명령어의 주소를 저장.
'Computer Science > System Programming' 카테고리의 다른 글
07. Assembly 2: Control Flow (0) | 2025.02.07 |
---|---|
06. Assembly 1: Basic Operations (0) | 2025.02.06 |
04. Byte Ordering (0) | 2025.02.05 |
03. Representation of Floating Points (0) | 2025.02.04 |
02. Representation of Integer (0) | 2025.02.03 |