C H A P T E R

7
ㅔ

프로그램의 처리

공부할 내용

★ 어셈블러가 사용하는 파일과 어셈블 과정

★ 링커가 사용하는 파일과 링크하는 과정

★ 리스팅

★ 크로스 레퍼런스

★ 맵

어셈블러가 사용하는 파일들

★ 소스 프로그램

★ 어셈블러가 출력하는 파일들

(1) 오브젝트 모듈 : 소스 프로그램이 기계어로 변환된 것

(2) 리스팅 : 소스 프로그램의 각 문장과 다른 중요한 정보가 포함되어 있는 어셈블 과정에서 만들어지는 보고서

(3) 크로스 레퍼런스를 만드는데 필요한 정보가 담긴 파일

(프로그램에서 정의된 모든 이름, 그 이름이 나타난 문장번호 등)

	그림 7-1			어셈블러의 입출력

	.ASM →	어셈블러	→ .OBJ
			→ .LST
			.CRF → .XRF .SBR

	표 7-1			어셈블러가 사용하는 파일 확장자

확장자	의미
ASM OBJ LST CRF XRF SBR	소스 프로그램 오브젝트 모듈 리스팅 (어셈블러가 생성하는 보고서) 크로스 레퍼런스 정보

링커가 사용하는 파일들

★ 링커(linker) - 오브젝트 모듈을 읽어서 실행가능 프로그램을 생성

	그림 7-2			링커의 입출력

	.OBJ → .LIB →	링크	→ .EXE → .MAP

	표 7-2			링커가 사용하는 파일 확장자

확장자	의미
OBJ EXE MAP LIB	오브젝트 모듈 실행 가능 프로그램 맵 (링커가 생성하는 보고서) 라이브러리

MS 매크로 어셈블러를 사용한 어셈블/링크 과정

★ MASM 6.0 이전

★ 어셈블 : MASM 명령을 사용한다.

(형식) MASM [소스 프로그램][, 오브젝트 모듈][, 리스팅][, 크로스 레퍼런스]

★ 링크 : LINK 명령을 사용한다.

(형식) LINK [오브젝트 모듈][, 실행 가능 프로그램][, 맵][, 라이브러리]

MS 어셈블러 6.0이상으로 어셈블하고 링크하는 과정

★ ML을 사용한다. (MS 어셈블러 버젼 6.0이상)

(형식) ML 소스 프로그램.ASM

(예) DISPLAY.ASM 을 어셈블하고 링크하는 명령

ML DISPLAY.ASM

	표 7-3			정보 파일을 생성하기 위한 ML 옵션

옵션	서비스
/Fl /Fm /Fr	리스팅 파일의 만든다 맵 파일을 만든다 크로스 레퍼런스 정보 파일을 만든다

리스팅

★ 그림 7-6은 그림 6-1에 있는 프로그램의 리스팅 화일

★ 페이지의 오른편 ∀ 프로그램

페이지의 왼편 ∀ 어셈블러가 생성한 기계어와 자료 영역

★ 기계어 : 16진수로 표현

처음 4자리 16진수 : 세그먼트 내의 오프셋

★ 어셈블러는 세그먼트를 시작할 때 오프셋이 0000H가 되도록 한다.

(세그먼트를 패러그래프에 정돈)

	그림 7-6			그림 6-1에 있는 프로토타입 프로그램의 리스팅

Microsoft  (R)  Macro Assembler Version 6.00B    07/26/92 21:21:41

DISPLAY -- prototype program                        Page 1 - 1

1	PAGE      58,132

2	;-----------------------------------

3	; DISPLAY

4	;

5	; Purpose:

6	;     to display a message on the screen

7	;-----------------------------------

8

9	; set title and instruction set

10	TITLE  DISPLAY -- prototype program

11	.286

12

13	; ---------------------- STACK segment

14   0000                       SSEG    SEGMENT STACK

15   0000  0020 [                       DB      32 DUP ("STACK---")

16          53 54 41 43 4B 2D

17          2D 2D

18         ]

19

20   0100                       SSEG    ENDS

21

22	; ----------------------- DATA segment

23   0000                       DSEG    SEGMENT

24   0000 48 65 6C 6C 6F 2C     MESSAGE DB       "Hello, how are you?",0DH,0AH

25        20 68 6F 77 20 61

26        72 65 20 79 6F 75

27        3F 0D 0A

28   0015 = 0015                L_MESSAGE EQU   $-MESSAGE

29   0015                       DSEG    ENDS

30

31	; ----------------------- CODE segment

32   0000                       CSEG    SEGMENT 'CODE'

33                                      ASSUME  CS:CSEG, SS:SSEG, DS:DSEG

34

Microsoft  (R)  Macro Assembler Version 6.00B    07/26/92 21:21:41

DISPLAY -- prototype program                        Page 2 - 1

35                                      PAGE

36                              ; -------------------------------------

37                              ; MAIN (main program)

38                              ;

39                              ; Purpose:

40                              ;    to display a message on the screen

41                              ;

42                              ; Input:

43                              ;    -- none --

44                              ;

45                              ; Output:

46                              ;  the message is displayed on the screen

47                              ;

48                              ; Procedures:

49                              ;    -- none --

50                              ; --------------------------------------

51

52                              ; Procedure: MAIN

53   0000                       MAIN    PROC    FAR

54

55                              ; save address to return to DOS

56   0000  1E                           PUSH    DS

57   0001  6A  00                       PUSH    0

58

59                              ; set up segment register

60   0003  B8 ---- R                    MOV     AX,DSEG

61   0006  8E D8                        MOV     DS,AX

62

63                              ; display the message

64   0008  BB 0001                      MOV     BX,0001H

65   000B  BA 0000 R                    LEA     DX,MESSAGE

66   000E  B9 0015                      MOV     CX,L_MESSAGE

67   0011  B4 40                        MOV     AH,40H

68   0013  CD 21                        INT     21H

69

70                              ; return to DOS

71   0015  CB                           RET

72

73                              ; End of Procedure: MAIN

74   0016                       MAIN    ENDP

75

76                              ; End of Code segment

77   0016                       CSEG    ENDS

78

79                              ; ----------------------- End of program

80                              END MAIN

Microsoft  (R)  Macro Assembler Version 6.00B    07/26/92 21:21:41

DISPLAY -- prototype program                        Symbols 3 - 1

Segments and Groups:

N a m e            Size     Length  Align    Combine Class

CSEG . . . . . . . . . . . . . .    16 Bit   0016     Para    Private

DSEG . . . . . . . . . . . . . .    16 Bit   0015     Para    Private

SSEG . . . . . . . . . . . . . .    16 Bit   0100     Para    Stack

Microsoft  (R)  Macro Assembler Version 6.00B    07/26/92 21:21:41

DISPLAY -- prototype program                        Symbols 4 - 1

Procedures, parameters and locals:

N a m e             Type    Value   Attr

MAIN . . . . . . . . . . . . . .    P Far   0000    CSEG Length= 0016 Public

Microsoft  (R)  Macro Assembler Version 6.00B    07/26/92 21:21:41

DISPLAY -- prototype program                        Symbols 5 - 1

Symbols:

N a m e             Type    Value   Attr

L_MESSAGE  . . . . . . . . . . . .  Number  0015h

MESSAGE  . . . . . . . . . . . . .  Byte    0000    DSEG

0 Warnings

0 Errors

크로스 레퍼런스

★ 프로그램에서 사용된 모든 이름을 보여주는 보고서이다.

- 이름이 정의된 곳의 행번호는 # 표시가 되어 있다.

- 이름 옆에는 그 이름이 나타난 모든 문장의 행번호가 있다.

- 디버깅할 때 유용함

★ CREF 프로그램을 사용해 생성함.

★ CREF는 크로스 레퍼런스 정보 파일을 읽은 후 보고서 작성

★ 크로스 레퍼런스 보고서가 담길 파일 이름의 확장자 : REF

★ 크로스 레퍼런스 프로그램의 사용법

(형식) CREF [정보 파일의 이름][, 보고서 파일에 붙일 이름]

맵

★ 링커가 만드는 보고서

★ 맵에서 각 세그먼트가 언급되는 순서는 프로그램을 실행시킬 때 그들이 메모리에 로드되는 순서이다.

	그림 7-8			그림 6-1에 있는 프로토타입 프로그램에 대한 맵

Start   Stop    Length  Name  Class

00000H  000FFH  00100H  SSEG

00100H  00114H  00015H  DSEG

00120H  00135H  00016H  CSEG

Address           Publics by Name

0012:0000        MAIN

Address           Publics by Value

0012:0000        MAIN

Program entry point at 0012:0000