[System Programming : Build Program] 1. SIC-XE를 통해 보는 기계어 opcode의 포멧!
이번 방학에는 System programming을 복습할 것이다. C에서 assembly 언어를 거쳐 기계어가 되는 build 과정은 확실히 이해해야 한다. 여기서 build는 compile을 포함하여 프로그램을 실행 파일로 만드는 일련의 과정을 말한다. 우리는 visual studio, eclipse와 같은 툴을 사용하면 RUN 클릭 하나로 손쉽게 프로그램을 빌드 및 실행할 수 있다. 하지만 그 일련의 과정을 알지 못한다면, 빌드 에러의 원인을 찾을 수 없으며, 직접 vim으로 makefile을 짜는 것도 불가능하다.
이해하고자 하는 flow는 다음과 같다.
C(.c) ----<compiler>----> Assembly(.s) ----<assembler>----> object file(.o) ----<linker, loader> ----> a.out
1. Terminology
Assembler : Translate assembly language into the machine code(.o)
Compiler : Translate High level language into the assembly code.
Linker : Combine object file into a single executable image.
Loader : Place object file into memory
2. 나는 빌드의 과정을 SIC / SICXE 머신으로 구현해본바 있다. 이를 통해 이해해보자.
이해하고자 하는 flow는 다음과 같다.
C(.c) ----<compiler>----> Assembly(.s) ----<assembler>----> object file(.o) ----<linker, loader> ----> a.out
1. Terminology
Assembler : Translate assembly language into the machine code(.o)
Compiler : Translate High level language into the assembly code.
Linker : Combine object file into a single executable image.
Loader : Place object file into memory
2. 나는 빌드의 과정을 SIC / SICXE 머신으로 구현해본바 있다. 이를 통해 이해해보자.
- SIC Machine Structure
- SIC는 총 5개의 register를 가진다. 각 레지스터는 고유한 역할을 가지고 있다.
- A : Accmulator, 수학 연산에 사용
- X : index register, addressing에 사용
- L : Linkage register, 함수 call시 돌아오는 return address 저장
- PC : Program Counter, 현재 실행하는 코드 주소
- SW : Status Word, 두 값 비교시 사용
- 자주 접근하는 address를 래지스터에 저장하여 빠르게 접근할 수 있다.(PC, L)
- Instruction Format은 다음과 같다(fig1)
- OP code : instruction
- Data movement : LDA, LDX, STA, STX ...
- Arithmetic : ADD, SUB, MUL, DIV...
- Comparison : COMP
- Conditional Jump : JEQ, JLT, JGT...
- Jump to Subroutine : JSUB / Return from Subroutine : RSUB
- X : indexed addressing mode를 위함
- X=0 -> TA(Target Address) = Address
- X=1 -> TA = Address + (X) (indexted register)
Fig1. SIC Instruction Format |
- SIC/XE Machine Structure
- SIC/XE는 총 5(SIC register) + 4 = 9개의 register 을 가진다.
- B : Base register, addressing에 사용
- S/T : General working register
- F : Floating point accumulator(48bit)
- Instruction Format(Fig2)
- Format3와 Format4를 보면 nixbpe flag가 보인다. 해당 flag는 address를 어떻게 접근할 것인지를 알려주는 기호이다.
- n/i : addressing mode를 알려준다.
- n=0, i=0 : SIC instruction
- n=0, i=1 : immediate addressing (no memory reference)
- n=1, i=0 : indirect addressing (pointer) : 2번의 메모리 접근 소요됨
- n=1, i=1 : simple addressing : direct한 접근
- x : indexed register을 TA에 더할지 여부를 알려줌(배열)
- b/p : displacement를 base register에 더할지 pc에 더할지 알려줌
- e : 0이면 Format3, 1이면 Format4
- Format4는 address를 직접 적는다. 하지만 후에 link/load하면 이 address는 맞게 수정되야 한다. 따라서 linker/loader가 관리해줘야한다. (후에 다시함)
Fig2. SIC/XE Instruction Format |
댓글
댓글 쓰기