1 / 56

7 장 링커와 로더 설계

7 장 링커와 로더 설계. 로더의 종류와 형태 링커와 로더가 필요로하는 정보 원시프로그램과 번역결과 절대상수와 재배치상수 링크를 위한 어셈블링 외부기호와 재배치 링크의 형태. 제 7 장 학습내용. 패스 1 과 패스 2 의 수행과정 패스 1 과 패스 2 의 자료구조 기억장소에 적재된 후의 형태 패스 1 과 패스 2 의 알고리즘. 제 7 장 학습내용. 컴파일 즉시로더 절대로더 재배치로더 링킹로더 동적로더. 로더의 종류와 형태. 재배치링크 및 적재를 한꺼번에 수행

Download Presentation

7 장 링커와 로더 설계

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7장 링커와 로더 설계

  2. 로더의 종류와 형태 링커와 로더가 필요로하는 정보 원시프로그램과 번역결과 절대상수와 재배치상수 링크를 위한 어셈블링 외부기호와 재배치 링크의 형태 제 7 장 학습내용

  3. 패스1과 패스2의 수행과정 패스1과 패스2의 자료구조 기억장소에 적재된 후의 형태 패스1과 패스2의 알고리즘 제 7 장 학습내용

  4. 컴파일 즉시로더 절대로더 재배치로더 링킹로더 동적로더 로더의 종류와 형태

  5. 재배치링크 및 적재를 한꺼번에 수행 두 단계의 패스로 구성 (패스1과 패스2로 구성) 링킹로더의 개념

  6. 패스1의 기능 * 모듈에 기억장소 할당 * 외부기호들의 주소 확정 * 외부기호표 작성 패스2의 기능 * 모든 상대주소를 절대주소로 변환 * 외부기호표 참조 후 적재 링킹로더의 패스1과 패스2

  7. 링킹로더의 수행과정 0 . . . 29 기억장소 A 500 530 550 A 0 . . . 19 링킹 로더 B B C 0 . . . 9 C

  8. 링크: 링킹로더 기억장소 할당: 운영체제 재배치: 링킹로더 적재: 링킹로더 링킹로더의 역할

  9. 재배치로더와 링킹로더의 단점 보완 기억장소의 효율적 활용 서브루틴들의 상호 호출관계 파악 오버레이 구조를 활용 동적로더의 개념

  10. A (20K) B (20K) D (10K) 70K C (30K) E (20K) 동적적재시 서브루틴의 호출관계

  11. 동적적재시 기억장소의 변화 A (20K) A (20K) A (20K) A (20K) B (20K) 60K B (20K) 40K E (20K) 50K D (10K) 70K E (20K) C (30K) E (20K)

  12. 번역된 목적코드의 모듈들 모듈의 길이 외부기호와 내부기호 재배치할 기호들과 수정방법 링커와 로더가 필요로 하는 정보

  13. EXTRN으로 선언된 기호 * 외부에서 정의되고 내부에서 이용 PUBLIC으로 선언된 기호 * 내부에서 정의되고 외부에서 이용 원시프로그램의 형태

  14. MAIN.ASM MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN EXTRN ADD2:NEAR, TABLE:WORD PUBLIC DATA3 ADD1: MOV AX, CS MOV DS, AX MOV AX, DATA1 ADD AX, DATA2 MAIN.ASM 모듈의 예

  15. MOV DATA3, AX CALL ADD2 MOV AH, 4CH INT 21H DATA1 DW ADD2 DATA2 DW TABLE DATA3 DW ? MAIN ENDS END MAIN.ASM 모듈의 예

  16. SUBST.ASM MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN EXTRN DATA3:WORD PUBLIC ADD2, TABLE ADD2: PROC NEAR PUSH AX MOV AX, TABLE ADD AX, POINT SUBST.ASM 모듈의 예

  17. MOV SUM, AX POP AX RET ADD2 ENDP TABLE DW 100 POINT DW DATA3 SUM DW ? MAIN ENDS END SUBST.ASM 모듈의 예

  18. MAIN SEGMENT ASSUME CS:MAIN,DS:MAIN; EXTRN SUM:WORD; MOV AX,CS MOV DX,AX MOV AX,100H ADD AX,TABLE MOV SAVE,AX MOV BX,OFFSET POINT MOV AH,4CH INT 21H TABLE DW 1, 7 ; POINT DW SAVE-RESULT RESULT DW ? SAVE DW ? ASUM DW SUM MAIN ENDS END 번역된 프로그램의 형태 상대 재배치 주소 비트 0000 00 MOV AX,CS 0002 00 MOV DS,AX 0004 00 MOV AX,0100 0007 01 ADD AX,WORD PTR[0015] 000B 10 MOV WORD PTR[001D],AX 000E 01 MOV BX,0019 0011 00 MOV AH,4C 0013 00 INT 21 0015 00 0001 0017 00 0007 0019 00 0002 001B 00 0000 001D 00 0000 001F 10 0000

  19. 절대상수 * 같은 모듈내의 기호끼리 연산결과 * SAVE - RESULT = 02 * 어셈블러가 계산 재배치상수 * 기호의 값이 결정된 후 연산결과 결정 * SUM - 5 * 재배치비트 설정 절대상수와 재배치상수

  20. 번역된 프로그램: 목적코드로 된 모듈 모듈의 길이: 외부기호표 외부기호: 외부기호표 내부기호: 외부기호표 재배치주소와 방법: 재배치 링크표 링크를 위한 어셈블링

  21. MAIN.ASM 모듈의 예 원시프로그램과 번역된 프로그램 MAIN SEGMENT ASSUME CS:MAIN,DS:MAIN; EXTRN B:PROC,B1:WORD PUBLIC A1; A MOV AX,CS MOV DS,AX MOV AX,A2 ADD AX,A2+2 ADD AX,A2+4 CALL B MOV AH,4CH INT 21H 상대 재배치 주소 비트 0000 00 MOV AX,CS 0002 00 MOV DS,AX 0004 01 MOV AX,[0018] 0007 01 ADD AX,[001A] 000B 01 ADD AX,[001C] 000F 10 CALL 0000 0012 00 MOV AH,4C 0014 00 INT 21

  22. MAIN.ASM 모듈의 예 원시프로그램과 번역된 프로그램 상대 재배치 주소 비트 0016 10 0 0018 10 20 001A 00 02 001C 10 05 001E 00 00 A1 DW B A2 DW A1+10 DW A2-A1 DW B1+5 DW 0 MAIN ENDS END

  23. SUBST.ASM 모듈의 예 원시프로그램과 번역된 프로그램 MAIN SEGMENT ASSUME CS:MAIN,DS:MAIN; EXTRN A1:NEAR PUBLIC B, B1; B PROC PUSH AX PUSH BX MOV AX, CS MOV DX, AX MOV AX, B1 ADD AX, B2+2 MOV B2, AX 상대 재배치 주소 비트 0000 00 PUSH AX 0001 00 PUSH BX 0002 00 MOV AX,CS 0004 00 MOV DS,AX 0006 01 MOV AX,[0013] 0009 01 ADD AX,[0017] 000D 10 MOV [0015],AX

  24. 원시프로그램과 번역된 프로그램 • SUBST.ASM 모듈의 예 상대 재배치 주소 비트 0010 00 POP BX 0011 00 POP AX 0012 00 RET 0013 00 000A 0015 00 0017 10 0013 POP BX POP AX RET B ENDP; B1 DW 10 B2 DW ? DW B1-A1 MAIN ENDS END

  25. MAIN의 상대주소 0018H의 경우 * A1 = (A1 - A) + A * A1 + 10 = (A1 - A) + A + 10 = 16H + A + 10 = 20H + A 번역된 프로그램의 분석

  26. MAIN의 상대주소 001AH의 경우 * A2 - A1 = 02H * 재배치비트는 00으로 됨 SUBST의 상대주소 0009H의 경우 * B2 = (B2 - B) + B = 15H + B * B2 + 2 = (B2 - B) + B + 2 = 15H + B + 2 = 17H + B 번역된 프로그램의 분석

  27. 모듈 MAIN의 외부기호표 외부기호표의 형태와 예 분류 SD LD LD LD ER ER 상대주소 0000 0000 0016 0018 - - 길이 1E 1E - - - - 기호 MAIN A A1 A2 B B1

  28. 모듈 MAIN의 재배치 링크표 재배치 링크의 형태와 예 + 또는 - + + + + + + + 상대주소 0004 0007 000B 000F 0016 0018 001C 기호 A A A B B A B1 상대주소 0004H에 A의 값을 더하라(+)

  29. 모듈 SUBST의 외부기호표 재배치 링크의 형태와 예 분류 SD LD LD LD ER 상대주소 0000 0000 0013 0015 - 길이 19 13 - - - 기호 MAIN B B1 B2 A1

  30. 모듈 SUBST의 재배치 링크표 재배치 링크의 형태와 예 + 또는 - + + + + - 상대주소 0006 0009 000D 0017 0017 기호 B B B B A1

  31. 패스1의 수행과정 * 단순링크 * 총괄외부기호표 작성 * 총괄재배치링크표 작성 패스2의 수행과정 * 기호값의 수정위치와 방법 결정 * 필요한 기호의 값 탐색 * 재배치비트 참고 후 재배치 링크 및 재배치의 과정

  32. 패스1이 만든 단순링크된 모듈 재배치 비트 상대주소 MAIN.ASM 0000 00 MOV AX, CS 0002 00 MOV DS, AX 0004 01 MOV AX, [0018] 0007 01 ADD AX, [001A] 000B 01 ADD AX, [001C] 000F 10 CALL 0000

  33. 패스1이 만든 단순링크된 모듈 재배치 비트 상대주소 0012 00 MOV AH, 4C 0014 00 INT 21 0016 10 0000 0018 10 0020 001A 00 0002 001C 10 0005

  34. 패스1이 만든 단순링크된 모듈 재배치 비트 상대주소 SUBST.ASM 001E 00 PUSH AX 001F 00 PUSH BX 0020 00 MOV AX, CS 0022 00 MOV DS, AX 0024 01 MOV AX, [0013]

  35. 패스1이 만든 단순링크된 모듈 상대주소 재배치 비트 0027 01 ADD AX, [0017] 002B 10 MOV [0015], AX 002E 00 POP BX 002F 00 POP AX 0030 00 RET 0031 00 000A 0033 00 - 0035 10 0013

  36. 패스1이 만든 단순링크된 모듈 상대주소 재배치 비트 SUBST.ASM 001E 00 PUSH AX 001F 00 PUSH BX 0020 00 MOV AX, CS 0022 00 MOV DS, AX 0024 01 MOV AX, [0013] 0027 01 ADD AX, [0017] 002B 10 MOV [0015], AX 002E 00 POP BX 002F 00 POP AX 0030 00 RET 0031 00 000A 0033 00 - 0035 10 0013 MAIN.ASM 0000 00 MOV AX, CS 0002 00 MOV DS, AX 0004 01 MOV AX, [0018] 0007 01 ADD AX, [001A] 000B 01 ADD AX, [001C] 000F 10 CALL 0000 0012 00 MOV AH, 4C 0014 00 INT 21 0016 10 0000 0018 10 0020 001A 00 0002 001C 10 0005

  37. 패스1이 만든 총괄외부기호표 형태 설명 (00H + 01EH) (13H + 01EH) (15H + 01EH) 기호 A A1 A2 B B1 B2 주소값 0000 0016 0018 001E 0031 0033

  38. 패스1이 만든 총괄재배치링크표 + 또는 - + + + + + + + 기호 A A A B B A B1 주소값 0004 0007 000B 000F 0016 0018 001C

  39. 패스1이 만든 총괄재배치링크표 + + + + - B B B B A1 0024(06H + 01EH) 0027(09H + 01EH) 002B(0DH + 01EH) 0035(17H + 01EH) 0035(17H + 01EH)

  40. 패스2가 만든 적재모듈 재배치 비트 상대주소 MAIN.ASM 0000 00 - 0002 00 - 0004 01 MOV AX, [0018] 0007 01 ADD AX, [001A] 000B 01 ADD AX, [001C] 000F 10 CALL 001E

  41. 패스2가 만든 적재모듈 재배치 비트 상대주소 0012 00 - 0014 00 - 0016 10 001E 0018 10 0020 001A 00 0002 001C 10 0036

  42. 패스2가 만든 적재모듈 상대주소 재배치 비트 SUBST.ASM 001E 00 - 001F 00 - 0020 00 - 0022 00 - 0024 01 MOV AX, [0031] 0027 01 ADD AX, [0035]

  43. 패스2가 만든 적재모듈 상대주소 재배치 비트 002B 00 MOV [0033], AX 002E 00 - 002F 00 - 0030 00 - 0031 10 000A 0033 00 - 0035 00 001B

  44. 패스2가 만든 적재 모듈 상대주소 재배치 비트 SUBST.ASM 001E 00 001F 00 0020 00 0022 00 0024 01 MOV AX, [0031] 0027 01 ADD AX, [0035] 002B 10 MOV [0033], AX 002E 00 002F 00 0030 00 0031 00 000A 0033 00 - 0035 00001B MAIN.ASM 0000 00 0002 00 0004 01 MOV AX, [0018] 0007 01 ADD AX, [001A] 000B 01 ADD AX, [001C] 000F 10 CALL 0000 0012 00 0014 00 0016 10 001E 0018 10 0020 001A 00 0002 001C 10 0036

  45. 링크재배치상수 모듈들을 링크하면 값이 결정 예) B1 - A1 적재재배치상수 적재될 때 값이 결정 링크재배치상수와 적재재배치상수

  46. 기억장소의 할당이 100(64H)번지부터 시작 기억장소에 적재된 후의 모양 주소 기억장치 0064 0066 0068 006B 006F 0073 8C C8 MOV AX, CS 8E D8 MOV DS, AX A1 OO7C MOV AX, [007C] 03 06 007E ADD AX, [007E] 03 06 0080 ADD AX, [0080] E8 7200 CALL 0082

  47. 기억장소에 적재된 후의 모양 기억장치 주소 0076 0078 007A 007C 007E 0080 0082 0083 B4 4C MOV AH, 4C CD 21 INT 21 2000 - 2000 - 0200 - 3800 - 50 PUSH AX 53 PUSH BX

  48. 기억장소에 적재된 후의 모양 주소 기억장치 0084 0086 0088 008B 008F 0092 8C C8 MOV AX, CS 8E D8 MOV DS, AX A1 0095 MOV AX, [0095] 03 06 0099 ADD AX, [0099] A3 0097 MOV [0097], AX 5B POP BX

  49. 기억장소에 적재된 후의 모양 주소 기억장치 0093 0094 0095 0097 0099 58 POP AX C3 RET 0A00 - 0000 - 1B00 -

  50. 패스1과 패스2의 데이터베이스 단순링크된 모듈 번역된 세그먼트들 적재 모듈 총괄외부 기호표 외부 기호표 총괄재배치 링크표 재배치 링크표 패스2 패스1

More Related