sliver__

2.12 Translating and Starting a Program 본문

CS/컴퓨터 구조

2.12 Translating and Starting a Program

sliver__ 2023. 10. 21. 15:36
728x90

A Translation hierachy for C

Compiler

Compiler는 C program을 assembly language로 변환

 

Assembler

pseudoinstruction을 assembly language로 변환.

Ex 1)

move $t0,$t1      # register $t0 gets register $t1

==>

add $t0,$zero,$t1 # register $t0 gets 0 + register $t1

 

Ex2)

Blt (branch on less than) => slt 과 bne로 변환

 

Assembly program을 개발한다면 pseudoinstruction을 쓰지만 실제 MIPS architecture와 성능을 고려한다면 real MIPS instruction을 알아야한다.

 

MIPS assembler는 hexadecimal 사용

 

Assembler는 assembly language를 machine code로 바꾼다.

Assmebler는 assembly language 프로그램을 object file로 바꾼다(machine language 명령어, 데이터, information으로 구성됨)

Assembler는 label, branch, data transfer instruction을 symbol table로 가지고 있다.

symbol table을 label 이름과 instruction이 존재하는 memory 주소로 구성되어 있다.

UNIX system의 object file 특징

 

Linker

 

독립적인 machine language program을 엮어준다.

Liner 3 steps

정의되지 않은 label의 ojbect 파일을 symbol table에 추가한다.

기준은 bracnh, jump, data address에 대한 명령어 기준으로 편집한다.

table의 old address 대비 new address로 업데이트 한다.

assemble는 object파일을 독립적으로 생성해서 모듈 간 상대적인 위치를 모른다. 링커는 모듈은 true location을 반영해서 모듈 간 메모리를 위치시킨다.

Linker는 executable file을 생성한다.

 

Loader

 

Loader 6 steps

 

Dynamically Linked Libraries

 

statically linking은 빠르지만 단점이 있다.

Disadvantage of statically libraries linking

Dynamically linked libraries(DLLs)는 loader가 dynamic linker를 실행시키고 파일의 추가정보를 사용해서 적절한 라이브러리를 찾고 external references들을 업데이트한다.

라이브러리 함수가 호출되면 linking 된다.

 

DLL via lazy procedure linkage

 

728x90
Comments