MAIN SEGMENT ASSUME CS MAIN ORG 100 MAIN

  • Slides: 73
Download presentation

절대로더를 위한 프로그램의 형태 주프로그램 MAIN SEGMENT ASSUME CS : MAIN. . . ORG

절대로더를 위한 프로그램의 형태 주프로그램 MAIN SEGMENT ASSUME CS : MAIN. . . ORG 100. . . MAIN CALL 400. . . ENDS END

3개 모듈의 링크와 재배치 A B 0. . . CALL B 20. . LA

3개 모듈의 링크와 재배치 A B 0. . . CALL B 20. . LA 1 DW LB 1. 29 0. . . 10. . LB 1 DW 5. 19 C 0. . . 9 상대주소 0. . . 29 30. . . 49 50. . . 59 링커 CALL 30 40 절대주소 A 500 CALL 530 540 520 A B 530 B 5 540 5 550 C C 559 적재 모듈 재배치로더 기억 장치

MAIN. ASM 모듈의 예 MAIN. ASM MAIN SEGMENT ASSUME CS: MAIN, DS: MAIN EXTRN

MAIN. ASM 모듈의 예 MAIN. ASM MAIN SEGMENT ASSUME CS: MAIN, DS: MAIN EXTRN ADD 2: NEAR, TABLE: WORD PUBLIC DATA 3 ADD 1: MOV AX, CS MOV DS, AX MOV AX, DATA 1 ADD AX, DATA 2

MAIN. ASM 모듈의 예 DATA 1 DATA 2 DATA 3 MAIN MOV CALL MOV

MAIN. ASM 모듈의 예 DATA 1 DATA 2 DATA 3 MAIN MOV CALL MOV INT DW DW DW ENDS END DATA 3, ADD 2 AH, 21 H ADD 2 TABLE ? AX 4 CH

SUBST. ASM 모듈의 예 SUBST. ASM MAIN SEGMENT ASSUME CS: MAIN, DS: MAIN EXTRN

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

SUBST. ASM 모듈의 예 ADD 2 TABLE POINT SUM MAIN MOV POP RET ENDP

SUBST. ASM 모듈의 예 ADD 2 TABLE POINT SUM MAIN MOV POP RET ENDP DW DW DW ENDS END SUM, AX AX 100 DATA 3 ?

u번역된 프로그램의 형태 MAIN SEGMENT 상대 재배치 ASSUME CS: MAIN, DS: MAIN; 주소 비트

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

원시프로그램과 번역된 프로그램 l MAIN. ASM 모듈의 예 MAIN SEGMENT ASSUME CS: MAIN, DS:

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

원시프로그램과 번역된 프로그램 l MAIN. ASM A 1 A 2 MAIN DW DW DW

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

원시프로그램과 번역된 프로그램 l SUBST. ASM 모듈의 예 MAIN SEGMENT ASSUME CS: MAIN, DS:

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

원시프로그램과 번역된 프로그램 l SUBST. ASM B B 1 B 2 MAIN 모듈의 예

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

패스 1이 만든 단순링크된 모듈 상대주소 재배치 비트 MAIN. ASM 0000 0002 0004 0007

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

패스 1이 만든 단순링크된 모듈 상대주소 재배치 비트 0012 0014 0016 0018 001 A

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

패스 1이 만든 단순링크된 모듈 상대주소 재배치 비트 SUBST. ASM 0020 0021 0022 0024

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

패스 1이 만든 단순링크된 모듈 상대주소 재배치 비트 0029 002 D 0030 0031 0032

패스 1이 만든 단순링크된 모듈 상대주소 재배치 비트 0029 002 D 0030 0031 0032 0035 0037 01 10 00 00 10 ADD AX, [0017] MOV [0015], AX POP BX RET 000 A 0013

패스 1이 만든 총괄재배치링크표 0026(06 H + 20 H) B + 0029(09 H +

패스 1이 만든 총괄재배치링크표 0026(06 H + 20 H) B + 0029(09 H + 20 H) B + 002 D(0 DH + 20 H) B + 0037(17 H + 20 H) A 1 -

패스 2가 만든 적재모듈 상대주소 재배치 비트 MAIN. ASM 0000 0002 0004 0007 000

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

패스 2가 만든 적재모듈 상대주소 재배치 비트 0012 0014 0016 0018 001 A 001

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

패스 2가 만든 적재모듈 상대주소 재배치 비트 SUBST. ASM 0020 0021 0022 0024 0026

패스 2가 만든 적재모듈 상대주소 재배치 비트 SUBST. ASM 0020 0021 0022 0024 0026 0029 00 00 01 01 MOV AX, [0033] ADD AX, [0037]

패스 2가 만든 적재모듈 상대주소 재배치 비트 002 D 0030 0031 0032 0033 0035

패스 2가 만든 적재모듈 상대주소 재배치 비트 002 D 0030 0031 0032 0033 0035 0037 00 00 10 00 00 MOV [0035], AX 000 A 001 D

기억장소에 적재된 후의 모양 l 기억장소의 할당이 100(64 H) 번지부터 시작 주소 0064 0066

기억장소에 적재된 후의 모양 l 기억장소의 할당이 100(64 H) 번지부터 시작 주소 0064 0066 0068 006 B 006 F 0073 8 C 8 E A 1 03 03 E 8 기억장치 C 8 MOV AX, CS D 8 MOV DS, AX OO 7 C MOV AX, [007 C] 06 007 E ADD AX, [007 E] 06 0080 ADD AX, [0080] 7200 CALL 0084

기억장소에 적재된 후의 모양 주소 0076 0078 007 A 007 C 007 E 0080

기억장소에 적재된 후의 모양 주소 0076 0078 007 A 007 C 007 E 0080 0084 0085 B 4 4 C CD 21 0084 0002 009 C 50 53 기억장치 MOV AH, 4 C INT 21 0084 0002 009 C PUSH AX PUSH BX

기억장소에 적재된 후의 모양 주소 0086 0088 008 A 008 D 0091 0094 8

기억장소에 적재된 후의 모양 주소 0086 0088 008 A 008 D 0091 0094 8 C 8 E A 1 03 A 3 5 B 기억장치 C 8 MOV AX, CS D 8 MOV DS, AX 0097 MOV AX, [0097] 06 009 B ADD AX, [009 B] 0099 MOV [0099], AX POP BX

기억장소에 적재된 후의 모양 주소 기억장치 0095 58 POP AX 0096 C 3 RET

기억장소에 적재된 후의 모양 주소 기억장치 0095 58 POP AX 0096 C 3 RET 0097 000 A 0099 0000 009 B 001 D