제 7 장 링커와 로더 설계
DESCRIPTION
제 7 장 링커와 로더 설계. 제 7 장 학습내용. 링커와 로더의 개념과 역할 부프로그램의 호출과 외부기호참조 재배치와 적재 개요 로더의 종류와 형태. 제 7 장 학습내용. 링커와 로더가 필요로하는 정보 원시프로그램과 번역결과 절대상수와 재배치상수 링크를 위한 어셈블링 외부기호와 재배치 링크의 형태. 제 7 장 학습내용. 패스 1 과 패스 2 의 수행과정 패스 1 과 패스 2 의 자료구조 기억장소에 적재된 후의 형태 패스 1 과 패스 2 의 알고리즘. 링커와 로더의 역할. - PowerPoint PPT PresentationTRANSCRIPT
제 제 7 7 장 링커와 로더 설계장 링커와 로더 설계
제 제 7 7 장 학습내용장 학습내용
링커와 로더의 개념과 역할
부프로그램의 호출과 외부기호 참조
재배치와 적재 개요
로더의 종류와 형태
제 제 7 7 장 학습내용장 학습내용
링커와 로더가 필요로하는 정보원시프로그램과 번역결과절대상수와 재배치상수링크를 위한 어셈블링외부기호와 재배치 링크의 형태
제 제 7 7 장 학습내용장 학습내용
패스 1 과 패스 2 의 수행과정
패스 1 과 패스 2 의 자료구조
기억장소에 적재된 후의 형태
패스 1 과 패스 2 의 알고리즘
링커와 로더의 역할링커와 로더의 역할
링킹 : 모듈들을 연결
주기억장치 할당 :
적재될 기억공간의 확보
재배치 : 기호들을 재배치
적재 : 재배치가 완료된 모듈을 적재
부프로그램의 호출부프로그램의 호출
CALL BCALL B
모듈 모듈 AA외부기호로외부기호로
분기분기
복귀복귀
모듈 모듈 BB
외부기호의 참조외부기호의 참조
LA1 DW LB1LA1 DW LB1
모듈 모듈 AA외부기호외부기호
참조참조모듈 모듈 BB
LB1 DW 5LB1 DW 5
주기억장치의 할당주기억장치의 할당
로더의 요구에 의해
운영체제가 수행운영체제 안에는 기억장치
관리 모듈 존재부분할당과 전체할당으로 구분
재배치 및 적재 재배치 및 적재
번역후 재배치가능 코드가 생성됨프로그램의 시작위치가 기준점재배치 작업은 각 명령어의
주소부분에 행해짐컴파일러가 재배치 정보 생성재배치비트를 이용하는 방법
로더의 종류와 형태로더의 종류와 형태
컴파일 즉시로더
절대로더
재배치로더
링킹로더
동적로더
컴파일 즉시로더의 개념컴파일 즉시로더의 개념
가장 간단한 방법로더의 기능은 거의 어셈블러가 수행로더의 기능은 단순히 실행을 제어어셈블러가 적재 기억장소낭비목적모듈이 보조기억장치에 저장 안됨
어셈블러의 재번역이 요구됨서로 다른 언어로 작성된 모듈들끼리 연결불가모든 모듈이 한꺼번에 번역 모듈화가
어려움
절대로더의 개념절대로더의 개념
출력결과는 보조기억장치에 저장로더는 번역시 정해진 위치에
적재만 수행프로그래머가 어셈블러에게
적재주소 지정각 모듈의 적재주소 지정
절대로더를절대로더를 위한위한 프로그램의프로그램의 형태형태
주프로그램MAIN SEGMENT ASSUME CS : MAIN... ORG 100... CALL 400...MAIN ENDS END
절대로더를절대로더를 위한위한 프로그램의프로그램의 형태형태
부프로그램MAIN SEGMENT
ASSUME CS : MAIN...
ORG 400...
RET
절대로더의 기능절대로더의 기능
링크 : 프로그래머
기억장소 할당번지 지정 :
프로그래머
재배치 : 어셈블러
적재 : 절대로더
재배치로더의 개념재배치로더의 개념
적재모듈을 주기억장치에 적재상대주소를 절대주소로 변환외부기호의 참조
* 모듈의 이름기호 참조
* 외부모듈에서 정의된 기호 참조
33 개의 외부모듈 정의개의 외부모듈 정의
모듈 M1
세그먼트 세그먼트 AA(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))
0 A 0 A ... ... ... ... ... CALL B ... CALL B 20 LA1 DW 20 LA1 DW LB1LB1
... ...... ... 2929
세그먼트 세그먼트 AA(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))
0 A 0 A ... ... ... ... ... CALL B ... CALL B 20 LA1 DW 20 LA1 DW LB1LB1
... ...... ... 2929
33 개의 외부모듈 정의개의 외부모듈 정의
모듈 M2
세그먼트 세그먼트 BB(( 상대주소상대주소 ) () ( 기호기호 ) () (명령어명령어 ))
0 B 0 B ... ... ... ... 10 LB1 DW 10 LB1 DW 5 5
... ...... ...
1919
세그먼트 세그먼트 BB(( 상대주소상대주소 ) () ( 기호기호 ) () (명령어명령어 ))
0 B 0 B ... ... ... ... 10 LB1 DW 10 LB1 DW 5 5
... ...... ...
1919
33 개의 외부모듈 정의개의 외부모듈 정의
모듈 M3
세그먼트 세그먼트 CC
(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))
0 C 0 C ... ...... ...
99
세그먼트 세그먼트 CC
(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))
0 C 0 C ... ...... ...
99
33 개 모듈의 링크와 재배치개 모듈의 링크와 재배치
00......2200......
2299
00......2200......
2299
AAAA CALL CALL
BBLA1 DW LA1 DW
LB1LB1
CALL CALL BB
LA1 DW LA1 DW LB1LB1
00......1100......
1199
00......1100......
1199
BBBB LB1 DW 5LB1 DW 5 LB1 DW 5LB1 DW 5
00......99
00......99
CCCC
링커링커링커링커
00......2299
3300......
4400......
4499
5500......
5599
00......2299
3300......
4400......
4499
5500......
5599
CALL 30CALL 304040CALL 30CALL 304040
5555
AAAA
BBBB
CCCC
상대주소상대주소상대주소상대주소500500
520520
530530
540540
550550
559559
500500
520520
530530
540540
550550
559559
CALL CALL 530530
540540
CALL CALL 530530
540540
5555
AAAA
BBBB
CCCC
절대주소절대주소절대주소절대주소
적재적재모듈모듈적재적재모듈모듈
기억기억장치장치기억기억장치장치
재배치로더재배치로더재배치로더재배치로더
각 모듈의 기호표각 모듈의 기호표
모듈 M1 의 기호표
기호기호
AABB
LA1LA1LB1LB1
기호기호
AABB
LA1LA1LB1LB1
분류분류
SDSDSDSDLDLDERER
분류분류
SDSDSDSDLDLDERER
상대주소상대주소
00--2020--
상대주소상대주소
00--2020--
길이길이
3030------
길이길이
3030------
각 모듈의 기호표각 모듈의 기호표
모듈 M2 의 기호표
기호기호
BB
LB1LB1
기호기호
BB
LB1LB1
분류분류
SDSD
LDLD
분류분류
SDSD
LDLD
상대주소상대주소
00
1010
상대주소상대주소
00
1010
길이길이
2020
--
길이길이
2020
--
각 모듈의 기호표각 모듈의 기호표
모듈 M3 의 기호표
기호기호
CC
기호기호
CC
분류분류
SDSD
분류분류
SDSD
상대주소상대주소
00
상대주소상대주소
00
길이길이
1010
길이길이
1010
링킹로더의 개념링킹로더의 개념
재배치링크 및 적재를한꺼번에 수행
두 단계의 패스로 구성( 패스 1 과 패스 2 로 구성 )
링킹로더의 패스링킹로더의 패스 11 과 패스과 패스 22
패스 1 의 기능* 모듈에 기억장소 할당* 외부기호들의 주소 확정* 외부기호표 작성
패스 2 의 기능* 모든 상대주소를 절대주소로 변환* 외부기호표 참조 후 적재
링킹로더의 수행과정링킹로더의 수행과정
링킹링킹로더로더링킹링킹로더로더
500500
530530
550550
500500
530530
550550
AAAA
BBBB
CCCC
기억장소기억장소기억장소기억장소00......2929
00......2929
AAAA
00......1919
00......1919
BBBB
00......99
00......99
CCCC
링킹로더의 역할링킹로더의 역할
링크 : 링킹로더
기억장소 할당 : 운영체제
재배치 : 링킹로더
적재 : 링킹로더
동적로더의 개념동적로더의 개념
재배치로더와 링킹로더의
단점 보완기억장소의 효율적 활용서브루틴들의 상호 호출관계 파악오버레이 구조를 활용
동적적재시동적적재시 서브루틴의서브루틴의 호출관계호출관계
A (20K)
B (20K)
C (30K)
D (10K)
E (20K)
70K
동적적재시 기억장소의 변화동적적재시 기억장소의 변화
50K40K60K70K
A (20K)
B (20K)
C (30K)
A (20K)
B (20K)
E (20K)
A (20K) A (20K)
E (20K)
E (20K) D (10K)
링커와링커와 로더가로더가 필요로필요로 하는하는 정보정보
번역된 목적코드의 모듈들
모듈의 길이
외부기호와 내부기호
재배치할 기호들과 수정방법
원시프로그램의 형태원시프로그램의 형태
EXTRN 으로 선언된 기호
* 외부에서 정의되고 내부에서 이용
PUBLIC 으로 선언된 기호
* 내부에서 정의되고 외부에서 이용
MAIN.ASM MAIN.ASM 모듈의 예모듈의 예
MAIN.ASMMAIN SEGMENT ASSUME CS:MAIN, DS:MAINEXTRN ADD2:NEAR, TABLE:WORDPUBLIC DATA3ADD1: MOV AX, CS MOV DS, AX MOV AX, DATA1 ADD AX, DATA2
MAIN.ASM MAIN.ASM 모듈의 예모듈의 예
MOV DATA3, AX CALL ADD2 MOV AH, 4CH INT 21HDATA1 DW ADD2DATA2 DW TABLEDATA3 DW ?MAIN ENDS END
SUBST.ASM SUBST.ASM 모듈의 예모듈의 예
SUBST.ASMMAIN SEGMENT ASSUME CS:MAIN, DS:MAINEXTRN DATA3:WORDPUBLIC ADD2, TABLEADD2: PROC NEAR PUSH AX MOV AX, TABLE ADD AX, POINT
SUBST.ASM SUBST.ASM 모듈의 예모듈의 예
MOV SUM, AX POP AX RETADD2 ENDPTABLE DW 100POINT DW DATA3SUM DW ?MAIN ENDS END
번역된 프로그램의 형태번역된 프로그램의 형태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 21HTABLE DW 1, 7;POINT DW SAVE-RESULTRESULT DW ?SAVE DW ?ASUM DW SUMMAIN ENDS END
상대 재배치상대 재배치주소 비트주소 비트
0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 00 MOV AX,01000004 00 MOV AX,01000007 01 ADD AX,WORD 0007 01 ADD AX,WORD PTR[0015]PTR[0015]
000B 10 MOV WORD 000B 10 MOV WORD PTR[001D],AXPTR[001D],AX
000E 01 MOV BX,0019000E 01 MOV BX,00190011 00 MOV AH,4C0011 00 MOV AH,4C0013 00 INT 210013 00 INT 210015 00 00010015 00 00010017 00 00070017 00 00070019 00 00020019 00 0002001B 00 0000001B 00 0000001D 00 0000001D 00 0000001F 10 0000001F 10 0000
상대 재배치상대 재배치주소 비트주소 비트
0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 00 MOV AX,01000004 00 MOV AX,01000007 01 ADD AX,WORD 0007 01 ADD AX,WORD PTR[0015]PTR[0015]
000B 10 MOV WORD 000B 10 MOV WORD PTR[001D],AXPTR[001D],AX
000E 01 MOV BX,0019000E 01 MOV BX,00190011 00 MOV AH,4C0011 00 MOV AH,4C0013 00 INT 210013 00 INT 210015 00 00010015 00 00010017 00 00070017 00 00070019 00 00020019 00 0002001B 00 0000001B 00 0000001D 00 0000001D 00 0000001F 10 0000001F 10 0000
절대상수와 재배치상수절대상수와 재배치상수
절대상수* 같은 모듈내의 기호끼리 연산결과* SAVE - RESULT = 02* 어셈블러가 계산
재배치상수* 기호의 값이 결정된 후 연산결과 결정* SUM - 5* 재배치비트 설정
링크를 위한 어셈블링링크를 위한 어셈블링
번역된 프로그램 :
목적코드로 된 모듈모듈의 길이 : 외부기호표외부기호 : 외부기호표내부기호 : 외부기호표재배치주소와 방법 : 재배치 링크표
원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램MAIN.ASM 모듈의 예
MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;
EXTRN B:PROC,BI:WORDEXTRN B:PROC,BI:WORDPUBLIC A1;PUBLIC A1;A MOV AX,CSA MOV AX,CS MOV DS,AXMOV DS,AX MOV AX,A2MOV AX,A2 ADD AX,A2+2ADD AX,A2+2 ADD AX,A2+4ADD AX,A2+4 CALL BCALL B MOV AH,4CHMOV AH,4CH INT 21HINT 21H
MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;
EXTRN B:PROC,BI:WORDEXTRN B:PROC,BI:WORDPUBLIC A1;PUBLIC A1;A MOV AX,CSA MOV AX,CS MOV DS,AXMOV DS,AX MOV AX,A2MOV AX,A2 ADD AX,A2+2ADD AX,A2+2 ADD AX,A2+4ADD AX,A2+4 CALL BCALL B MOV AH,4CHMOV AH,4CH INT 21HINT 21H
상대 재배치상대 재배치주소 비트주소 비트
0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 01 MOV AX,0004 01 MOV AX,[0018][0018]
0007 01 ADD AX,0007 01 ADD AX,[001A][001A]
000B 01 ADD AX,000B 01 ADD AX,[001C][001C]
000F 10 CALL 0000000F 10 CALL 00000012 00 MOV AH,4C0012 00 MOV AH,4C0014 00 INT 210014 00 INT 21
상대 재배치상대 재배치주소 비트주소 비트
0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 01 MOV AX,0004 01 MOV AX,[0018][0018]
0007 01 ADD AX,0007 01 ADD AX,[001A][001A]
000B 01 ADD AX,000B 01 ADD AX,[001C][001C]
000F 10 CALL 0000000F 10 CALL 00000012 00 MOV AH,4C0012 00 MOV AH,4C0014 00 INT 210014 00 INT 21
원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램MAIN.ASM 모듈의 예
A1 DW BA1 DW BA2 DW A1+10A2 DW A1+10 DW A2-A1DW A2-A1 DW B1+5DW B1+5 DW 0DW 0MAIN ENDSMAIN ENDS ENDEND
A1 DW BA1 DW BA2 DW A1+10A2 DW A1+10 DW A2-A1DW A2-A1 DW B1+5DW B1+5 DW 0DW 0MAIN ENDSMAIN ENDS ENDEND
상대 재배치상대 재배치주소 비트주소 비트0016 10 00016 10 00018 10 200018 10 20001A 00 02001A 00 02001C 10 05001C 10 05001E 00 00001E 00 00
상대 재배치상대 재배치주소 비트주소 비트0016 10 00016 10 00018 10 200018 10 20001A 00 02001A 00 02001C 10 05001C 10 05001E 00 00001E 00 00
원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램SUBST.ASM 모듈의 예
MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;
EXTRN A1:NEAREXTRN A1:NEARPUBLIC B, B1;PUBLIC B, B1;B PROCB PROC PUSH AXPUSH AX PUSH BXPUSH BX MOV AX, CSMOV AX, CS MOV DX, AXMOV DX, AX MOV AX, B1MOV AX, B1 ADD AX, B2+2ADD AX, B2+2 MOV B2, AXMOV B2, AX
MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;
EXTRN A1:NEAREXTRN A1:NEARPUBLIC B, B1;PUBLIC B, B1;B PROCB PROC PUSH AXPUSH AX PUSH BXPUSH BX MOV AX, CSMOV AX, CS MOV DX, AXMOV DX, AX MOV AX, B1MOV AX, B1 ADD AX, B2+2ADD AX, B2+2 MOV B2, AXMOV B2, AX
상대 재배치상대 재배치주소 비트주소 비트
0000 00 PUSH AX0000 00 PUSH AX0001 00 PUSH BX0001 00 PUSH BX0002 00 MOV AX,CS0002 00 MOV AX,CS0004 00 MOV DS,AX0004 00 MOV DS,AX0006 01 MOV AX,0006 01 MOV AX,[0013][0013]
0009 01 ADD AX,0009 01 ADD AX,[0017][0017]
000D 10 MOV 000D 10 MOV [0015],AX[0015],AX
상대 재배치상대 재배치주소 비트주소 비트
0000 00 PUSH AX0000 00 PUSH AX0001 00 PUSH BX0001 00 PUSH BX0002 00 MOV AX,CS0002 00 MOV AX,CS0004 00 MOV DS,AX0004 00 MOV DS,AX0006 01 MOV AX,0006 01 MOV AX,[0013][0013]
0009 01 ADD AX,0009 01 ADD AX,[0017][0017]
000D 10 MOV 000D 10 MOV [0015],AX[0015],AX
원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램
POP BXPOP BX POP AXPOP AX RETRETB ENDP;B ENDP;B1 DW 10B1 DW 10B2 DW ?B2 DW ? DW B1-A1DW B1-A1MAIN ENDSMAIN ENDS ENDEND
POP BXPOP BX POP AXPOP AX RETRETB ENDP;B ENDP;B1 DW 10B1 DW 10B2 DW ?B2 DW ? DW B1-A1DW B1-A1MAIN ENDSMAIN ENDS ENDEND
상대 재배치상대 재배치주소 비트주소 비트0010 00 POP 0010 00 POP BXBX
0011 00 POP 0011 00 POP AXAX
0012 00 RET0012 00 RET
0013 00 000A0013 00 000A0015 000015 000017 10 00130017 10 0013
상대 재배치상대 재배치주소 비트주소 비트0010 00 POP 0010 00 POP BXBX
0011 00 POP 0011 00 POP AXAX
0012 00 RET0012 00 RET
0013 00 000A0013 00 000A0015 000015 000017 10 00130017 10 0013
SUBST.ASM SUBST.ASM 모듈의 예모듈의 예 SUBST.ASM SUBST.ASM 모듈의 예모듈의 예
번역된 프로그램의 분석번역된 프로그램의 분석
MAIN 의 상대주소 0018H 의 경우* A1 = (A1 - A) + A
* A1 + 10 = (A1 - A) + A + 10
= 16H + A + 10
= 20H + A
번역된 프로그램의 분석번역된 프로그램의 분석
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
외부기호표의 형태와 예외부기호표의 형태와 예모듈 MAIN 의 외부기호표
기호기호MAINMAINAAA1A1A2A2BBB1B1
기호기호MAINMAINAAA1A1A2A2BBB1B1
분류분류SDSDLDLDLDLDLDLDERERERER
분류분류SDSDLDLDLDLDLDLDERERERER
상대주소상대주소00000000000000000016001600180018----
상대주소상대주소00000000000000000016001600180018----
길이길이1E1E1E1E--------
길이길이1E1E1E1E--------
재배치 링크의 형태와 예재배치 링크의 형태와 예
모듈 MAIN 의 재배치 링크표
+ + 또는 또는 -- ++++++++++++++
+ + 또는 또는 -- ++++++++++++++
상대주소상대주소0004000400070007000B000B000F000F0016001600180018001C001C
상대주소상대주소0004000400070007000B000B000F000F0016001600180018001C001C
기호기호AAAAAABBBBAAB1B1
기호기호AAAAAABBBBAAB1B1
상대주소 상대주소 0004H0004H 에 에 AA 의 값을 더하라의 값을 더하라 (+)(+)
재배치 링크의 형태와 예재배치 링크의 형태와 예
모듈 SUBST 의 외부기호표
기호기호
MAINMAINBBB1B1B2B2A1A1
기호기호
MAINMAINBBB1B1B2B2A1A1
분류분류
SDSDLDLDLDLDLDLDERER
분류분류
SDSDLDLDLDLDLDLDERER
상대주소상대주소
00000000000000000013001300150015--
상대주소상대주소
00000000000000000013001300150015--
길이길이
19191313------
길이길이
19191313------
재배치 링크의 형태와 예재배치 링크의 형태와 예
모듈 SUBST 의 재배치 링크표
+ + 또는 또는 --
++++++++--
+ + 또는 또는 --
++++++++--
상대주소상대주소
0006000600090009000D000D0017001700170017
상대주소상대주소
0006000600090009000D000D0017001700170017
기호기호
BBBBBBBBA1A1
기호기호
BBBBBBBBA1A1
링크 및 재배치의 과정링크 및 재배치의 과정
패스 1 의 수행과정* 단순링크* 총괄외부기호표 작성* 총괄재배치링크표 작성
패스 2 의 수행과정* 기호값의 수정위치와 방법 결정* 필요한 기호의 값 탐색* 재배치비트 참고 후 재배치
패스패스 11 이 만든 단순링크된 이 만든 단순링크된 모듈모듈
MAIN.ASMMAIN.ASM 0000 00 MOV AX, CS0000 00 MOV AX, CS 0002 00 MOV DS, AX0002 00 MOV DS, AX 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]
0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]
000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]
000F 10 CALL 0000000F 10 CALL 0000
MAIN.ASMMAIN.ASM 0000 00 MOV AX, CS0000 00 MOV AX, CS 0002 00 MOV DS, AX0002 00 MOV DS, AX 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]
0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]
000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]
000F 10 CALL 0000000F 10 CALL 0000
상대주소상대주소상대주소상대주소 재배치재배치비트비트
재배치재배치비트비트
패스패스 11 이 만든 단순링크된 이 만든 단순링크된 모듈모듈
0012 00 MOV AH, 0012 00 MOV AH, 4C4C
0014 00 INT 210014 00 INT 21 0016 10 00000016 10 0000 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0005001C 10 0005
0012 00 MOV AH, 0012 00 MOV AH, 4C4C
0014 00 INT 210014 00 INT 21 0016 10 00000016 10 0000 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0005001C 10 0005
재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
SUBST.ASMSUBST.ASM 001E 00 PUSH AX001E 00 PUSH AX 001F 00 PUSH BX001F 00 PUSH BX 0020 00 MOV AX, CS0020 00 MOV AX, CS 0022 00 MOV DS, AX0022 00 MOV DS, AX 0024 01 MOV AX, 0024 01 MOV AX, [0013][0013]
SUBST.ASMSUBST.ASM 001E 00 PUSH AX001E 00 PUSH AX 001F 00 PUSH BX001F 00 PUSH BX 0020 00 MOV AX, CS0020 00 MOV AX, CS 0022 00 MOV DS, AX0022 00 MOV DS, AX 0024 01 MOV AX, 0024 01 MOV AX, [0013][0013]
패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
0027 01 ADD AX, 0027 01 ADD AX, [0017][0017]
002B 10 MOV 002B 10 MOV [0015], AX[0015], AX
002E 00 POP BX002E 00 POP BX 002F 00 POP AX 002F 00 POP AX 0030 00 RET0030 00 RET 0031 00 000A0031 00 000A 0033 00 -0033 00 - 0035 10 00130035 10 0013
0027 01 ADD AX, 0027 01 ADD AX, [0017][0017]
002B 10 MOV 002B 10 MOV [0015], AX[0015], AX
002E 00 POP BX002E 00 POP BX 002F 00 POP AX 002F 00 POP AX 0030 00 RET0030 00 RET 0031 00 000A0031 00 000A 0033 00 -0033 00 - 0035 10 00130035 10 0013
패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
패스패스 11 이이 만든만든 총괄외부기호표총괄외부기호표 형태형태
설명설명
(00H + (00H + 01EH)01EH)
(13H + (13H + 01EH)01EH)
(15H + (15H + 01EH)01EH)
설명설명
(00H + (00H + 01EH)01EH)
(13H + (13H + 01EH)01EH)
(15H + (15H + 01EH)01EH)
기호기호
AAA1A1A2A2
BBB1B1B2B2
기호기호
AAA1A1A2A2
BBB1B1B2B2
주소값주소값
000000000016001600180018
001E001E0031003100330033
주소값주소값
000000000016001600180018
001E001E0031003100330033
패스패스 11 이이 만든만든 총괄재배치링크표총괄재배치링크표
+ + 또는 또는 --
++++++++++++++
+ + 또는 또는 --
++++++++++++++
기호기호
AAAAAABBBBAAB1B1
기호기호
AAAAAABBBBAAB1B1
주소값주소값
0004000400070007000B000B000F000F0016001600180018001C001C
주소값주소값
0004000400070007000B000B000F000F0016001600180018001C001C
패스패스 11 이이 만든만든 총괄재배치링크표총괄재배치링크표
++
++
++
++
--
++
++
++
++
--
BB
BB
BB
BB
A1A1
BB
BB
BB
BB
A1A1
0024(06H + 0024(06H +
01EH)01EH)
0027(09H + 0027(09H +
01EH)01EH)
002B(0DH + 002B(0DH +
01EH)01EH)
0035(17H + 0035(17H +
01EH)01EH)
0035(17H + 0035(17H +
01EH)01EH)
0024(06H + 0024(06H +
01EH)01EH)
0027(09H + 0027(09H +
01EH)01EH)
002B(0DH + 002B(0DH +
01EH)01EH)
0035(17H + 0035(17H +
01EH)01EH)
0035(17H + 0035(17H +
01EH)01EH)
패스패스 22 가 만든 적재모듈가 만든 적재모듈
MAIN.ASMMAIN.ASM 0000 00 -0000 00 - 0002 00 -0002 00 - 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]
0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]
000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]
000F 10 CALL 001E000F 10 CALL 001E
MAIN.ASMMAIN.ASM 0000 00 -0000 00 - 0002 00 -0002 00 - 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]
0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]
000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]
000F 10 CALL 001E000F 10 CALL 001E
재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
패스패스 22 가 만든 적재모듈가 만든 적재모듈
0012 00 -0012 00 - 0014 00 -0014 00 - 0016 10 001E0016 10 001E 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0036001C 10 0036
0012 00 -0012 00 - 0014 00 -0014 00 - 0016 10 001E0016 10 001E 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0036001C 10 0036
재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
패스패스 22 가 만든 적재모듈가 만든 적재모듈
SUBST.ASMSUBST.ASM 001E 00 -001E 00 - 001F 00 -001F 00 - 0020 00 -0020 00 - 0022 00 -0022 00 - 0024 01 MOV AX, 0024 01 MOV AX, [0031][0031]
0027 01 ADD AX, 0027 01 ADD AX, [0035][0035]
SUBST.ASMSUBST.ASM 001E 00 -001E 00 - 001F 00 -001F 00 - 0020 00 -0020 00 - 0022 00 -0022 00 - 0024 01 MOV AX, 0024 01 MOV AX, [0031][0031]
0027 01 ADD AX, 0027 01 ADD AX, [0035][0035]
재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
패스패스 22 가 만든 적재모듈가 만든 적재모듈
002B 00 MOV 002B 00 MOV [0033], AX[0033], AX
002E 00 -002E 00 - 002F 00 -002F 00 - 0030 00 -0030 00 - 0031 10 000A0031 10 000A 0033 00 -0033 00 - 0035 00 001B0035 00 001B
002B 00 MOV 002B 00 MOV [0033], AX[0033], AX
002E 00 -002E 00 - 002F 00 -002F 00 - 0030 00 -0030 00 - 0031 10 000A0031 10 000A 0033 00 -0033 00 - 0035 00 001B0035 00 001B
재배치재배치비트비트
재배치재배치비트비트
상대주소상대주소상대주소상대주소
링크재배치상수와링크재배치상수와 적재재배치상수적재재배치상수
링크재배치상수
모듈들을 링크하면 값이 결정
예 ) B1 - A1
적재재배치상수
적재될 때 값이 결정
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
기억장소의 할당이 100(64H)번지부터 시작
8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 OO7C MOV AX, A1 OO7C MOV AX, [007C][007C]
03 06 007E ADD AX, 03 06 007E ADD AX, [007E][007E]
03 06 0080 ADD AX, 03 06 0080 ADD AX, [0080][0080]
E8 7200 CALL 0082E8 7200 CALL 0082
8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 OO7C MOV AX, A1 OO7C MOV AX, [007C][007C]
03 06 007E ADD AX, 03 06 007E ADD AX, [007E][007E]
03 06 0080 ADD AX, 03 06 0080 ADD AX, [0080][0080]
E8 7200 CALL 0082E8 7200 CALL 0082
006400640066006600680068006B006B006F006F00730073
006400640066006600680068006B006B006F006F00730073
주소주소주소주소 기억장치기억장치기억장치기억장치
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
B4 4C MOV AH, B4 4C MOV AH, 4C4C
CD 21 INT 21CD 21 INT 212000 -2000 -2000 -2000 -0200 -0200 -3800 -3800 -50 PUSH AX50 PUSH AX53 PUSH BX53 PUSH BX
B4 4C MOV AH, B4 4C MOV AH, 4C4C
CD 21 INT 21CD 21 INT 212000 -2000 -2000 -2000 -0200 -0200 -3800 -3800 -50 PUSH AX50 PUSH AX53 PUSH BX53 PUSH BX
0076007600780078007A007A007C007C007E007E008000800082008200830083
0076007600780078007A007A007C007C007E007E008000800082008200830083
주소주소주소주소 기억장치기억장치기억장치기억장치
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
기억장치기억장치기억장치기억장치8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 0095 MOV AX, A1 0095 MOV AX, [0095][0095]
03 06 0099 ADD AX, 03 06 0099 ADD AX, [0099][0099]
A3 0097 MOV A3 0097 MOV [0097], AX[0097], AX
5B POP BX5B POP BX
8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 0095 MOV AX, A1 0095 MOV AX, [0095][0095]
03 06 0099 ADD AX, 03 06 0099 ADD AX, [0099][0099]
A3 0097 MOV A3 0097 MOV [0097], AX[0097], AX
5B POP BX5B POP BX
008400840086008600880088008B008B008F008F00920092
008400840086008600880088008B008B008F008F00920092
주소주소주소주소
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
기억장치기억장치기억장치기억장치
58 POP AX58 POP AX
C3 RETC3 RET
0A00 -0A00 -
0000 -0000 -
1B00 -1B00 -
58 POP AX58 POP AX
C3 RETC3 RET
0A00 -0A00 -
0000 -0000 -
1B00 -1B00 -
00930093
00940094
00950095
00970097
00990099
00930093
00940094
00950095
00970097
00990099
주소주소주소주소
패스패스 22패스패스 22
패스패스 11 과 패스과 패스 22 의 의 데이터베이스데이터베이스
패스패스 11패스패스 11
번역된번역된세그먼트들세그먼트들번역된번역된
세그먼트들세그먼트들
외부외부기호표기호표외부외부기호표기호표
재배치재배치링크표링크표재배치재배치링크표링크표
단순링크된단순링크된모듈모듈
단순링크된단순링크된모듈모듈 적재적재
모듈모듈적재적재모듈모듈
총괄외부 총괄외부 기호표기호표
총괄외부 총괄외부 기호표기호표
총괄재배치총괄재배치링크표링크표
총괄재배치총괄재배치링크표링크표
세그먼트 배열순서 결정세그먼트 배열순서 결정세그먼트 배열순서 결정세그먼트 배열순서 결정
시 작시 작시 작시 작
세그먼트들을세그먼트들을 배열순서에배열순서에따라 연결따라 연결
세그먼트들을세그먼트들을 배열순서에배열순서에따라 연결따라 연결
패스패스 11 의 알고리즘의 알고리즘
기호가 중복되지 기호가 중복되지 않도록 기호표들을않도록 기호표들을
단순연결단순연결
기호가 중복되지 기호가 중복되지 않도록 기호표들을않도록 기호표들을
단순연결단순연결
재배치링크표재배치링크표들을 단순연결들을 단순연결재배치링크표재배치링크표들을 단순연결들을 단순연결
입력입력입력입력
패스패스 11끝끝
패스패스 11끝끝
단순링크된단순링크된모듈모듈
단순링크된단순링크된모듈모듈
상대주소변경상대주소변경(( 앞에 배열된앞에 배열된세그먼트의세그먼트의길이를 더한다길이를 더한다 ))
상대주소변경상대주소변경(( 앞에 배열된앞에 배열된세그먼트의세그먼트의길이를 더한다길이를 더한다 ))
패스패스 11 의 알고리즘의 알고리즘
기호의 기호의 상대주소변경상대주소변경기호의 기호의
상대주소변경상대주소변경 상대주소변경상대주소변경상대주소변경상대주소변경
총괄외부총괄외부기호표기호표
총괄외부총괄외부기호표기호표
총괄재배치총괄재배치링크표링크표
총괄재배치총괄재배치링크표링크표
패스패스 22 의 알고리즘의 알고리즘
읽은 줄의 내용을 다음과 같이 변수에 치환읽은 줄의 내용을 다음과 같이 변수에 치환 addr = addr = 상대주소상대주소 symbol = symbol = 기호기호 sign = + sign = + 또는 또는 --
읽은 줄의 내용을 다음과 같이 변수에 치환읽은 줄의 내용을 다음과 같이 변수에 치환 addr = addr = 상대주소상대주소 symbol = symbol = 기호기호 sign = + sign = + 또는 또는 --
총괄재배치링크표에서 한 줄을 읽음총괄재배치링크표에서 한 줄을 읽음총괄재배치링크표에서 한 줄을 읽음총괄재배치링크표에서 한 줄을 읽음
총괄재배치링크표 끝총괄재배치링크표 끝 ??총괄재배치링크표 끝총괄재배치링크표 끝 ??
아니오아니오아니오아니오
예예예예
패스패스 2 2 시작시작
패스패스 2 2 시작시작
패스패스 2 2 끝끝
패스패스 2 2 끝끝
실패실패실패실패
성공성공성공성공
오류오류오류오류
패스패스 22 의 알고리즘의 알고리즘
재배치비트가 가리키는 데이터에재배치비트가 가리키는 데이터에ValueValue 를 를 signsign 에 따라 더함에 따라 더함재배치비트가 가리키는 데이터에재배치비트가 가리키는 데이터에ValueValue 를 를 signsign 에 따라 더함에 따라 더함
단순링크 모듈에서단순링크 모듈에서상대주소상대주소 =addr =addr 탐색탐색단순링크 모듈에서단순링크 모듈에서
상대주소상대주소 =addr =addr 탐색탐색
실패실패실패실패
성공성공성공성공탐색된 기호의 상대주소를 변수에 치환탐색된 기호의 상대주소를 변수에 치환 Value=Value= 주소값주소값탐색된 기호의 상대주소를 변수에 치환탐색된 기호의 상대주소를 변수에 치환 Value=Value= 주소값주소값
오류오류오류오류총괄외부기호표에서 총괄외부기호표에서 기호기호 =symbol=symbol 인 행을 탐색인 행을 탐색
총괄외부기호표에서 총괄외부기호표에서 기호기호 =symbol=symbol 인 행을 탐색인 행을 탐색
제 제 7 7 장 요약장 요약
링커와 로더의 역할로더의 종류링커와 로더가 필요한 정보 이해번역된 프로그램 형태 이해절대상수와 재배치상수 이해재배치 링크와 형태 이해
제 제 7 7 장 요약장 요약
패스 1 과 패스 2 의 수행과정 이해
패스 1 과 패스 2 의 자료구조 이해
기억장소에 적재된 상태 이해
패스 1 과 패스 2 의 알고리즘 이해