Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
01.05.2014
Размер:
81.41 Кб
Скачать

Задание:

  1. Просмотреть программу hello1.asm, приведенную в каталоге lab1 и разобраться в структуре и реализации каждого сегмента программы. Непонятные фрагменты прояснить у преподавателя. Строку-приветствие преобразовать в соответствии со своими личными данными.

  2. Протранслировать программу с помощью строки

> masm hello1.asm

c созданием объектного файла и файла диагностических сообщений (файла листинга). Объяснить и исправить синтаксические ошибки, если они будут обнаружены транслятором. Повторить трансляцию программы до получения объектного модуля.

  1. Скомпоновать загрузочный модуль с помощью строки

> link hello1.obj

  1. Выполнить программу: - в автоматическом режиме путем набора строки

> hello1.exe

и убедиться в ее работоспособности;

-в пошаговом режиме с помощью отладчика

>afd Hello1.exe

с фиксацией содержимого используемых регистров и ячеек памяти до и после выполнения команды.

Текст программы:

;текст программы

EOFLine EQU '$' ; Определение символьной константы

; "конец строки"

;стек программы

AStack SEGMENT STACK

DW 12 DUP(?) ; отводится 12 слов памяти

AStack ENDS

;данные программы

DATA SEGMENT

; директивы описания данных

HELLO DB 'Здравствуйте!', 0AH, 0DH,EOFLine

GREETING DB 'Привет от сереги',10,10,'$'

DATA ENDS

; код программы

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:AStack

; процедура печати строки

WriteMsg PROC NEAR

mov AH,9

int 21h ; вывод строки на экран

ret

WriteMsg ENDP

;головная процедура

Main PROC FAR

push DS ;\ Сохранения адреса начала в PSP стеке

sub AX,AX ; > процедура последующего восстановления по

push AX ;/ команде ret, завершающей процедуру.

mov AX,DATA ; загрузка сегментного

mov DS,AX ; регистра данных.

mov ax,0003h ; очистка экрана

int 10h

mov DX, OFFSET HELLO ; вывод на экран первой

call WriteMsg ; строки приветствия

mov DX, OFFSET GREETING ; вывод на зкран второй

call WriteMsg ; строки приветствия.

ret ; выход в DOS по команде,

; находящейся в 1-ом слове PSP.

Main ENDP

CODE ENDS

END Main

Протокол работы на компьютере

MASM.EXE выбор HELLO.ASM

Задание имен файлам <hello>.obj и <hello>.lst

LINK.EXE выбор HELLO.OBJ

Задание имен файлам <hello>.exe, <hello>.map, <hello>.def

Файл диагностических сообщений:

Microsoft (R) Macro Assembler Version 5.10 3/9/5

Page 1-1

1 ;текст программы

2

3 = 0024 EOFLine EQU '$' ; Определение символьной константы

4 ; "конец строки"

5

6 ;стек программы

7

8 0000 AStack SEGMENT STACK

9 0000 000C[ DW 12 DUP(?) ; отводится 1

2 слов памяти

10 ????

11 ]

12

13 0018 AStack ENDS

14

15 ;данные программы

16

17 0000 DATA SEGMENT

18

19 ; директивы описания данных

20

21 0000 C7 E4 F0 E0 E2 F1 HELLO DB 'Здравствуйте!', 0AH, 0DH,EOFLine

22 F2 E2 F3 E9 F2 E5

23 21 0A 0D 24

24 0010 CF F0 E8 E2 E5 F2 GREETING DB 'Привет от сереги',10,10,'$'

25 20 EE F2 20 F1 E5

26 F0 E5 E3 E8 0A 0A

27 24

28 0023 DATA ENDS

29

30 ; код программы

31

32 0000 CODE SEGMENT

33 ASSUME CS:CODE, DS:DATA, SS:A Stack

34

35 ; процедура печати строки

36 0000 WriteMsg PROC NEAR

37 0000 B4 09 mov AH,9

38 0002 CD 21 int 21h ; вывод строки на экран

39 0004 C3 ret

40 0005 WriteMsg ENDP

41

42 ;головная процедура

43 0005 Main PROC FAR

44 0005 1E push DS ;\ Сохранении адреса начала в PSP стеке

45 0006 2B C0 sub AX,AX ; > процедура последующего восстановления по

46 0008 50 push AX ;/ команде ret, завершающей процедуру.

47 0009 B8 ---- R mov AX,DATA ; загрузка сегментного

48 000C 8E D8 mov DS,AX ; регистра данных.

49

50 000E B8 0003 mov ax,0003h ; очистка экрана

51 0011 CD 10 int 10h

52

53 0013 BA 0000 R mov DX, OFFSET HELLO ; вывод на экран первой

54 0016 E8 0000 R call WriteMsg ; строки приветствия

55

56 0019 BA 0010 R mov DX, OFFSET GREETING ; вывод на зкран второй

57 001C E8 0000 R call WriteMsg ; строки приветствия.

58 001F CB ret ; выход в DOS по команде,

59 ; находящейся в 1-ом слове PSP.

60 0020 Main ENDP

61 0020 CODE ENDS

62 END Main

Segments and Groups:

N a m e Length Align Combine Class

ASTACK . . . . . . . . . . . . . 0018 PARA STACK

CODE . . . . . . . . . . . . . . 0020 PARA NONE

DATA . . . . . . . . . . . . . . 0023 PARA NONE

Symbols:

N a m e Type Value Attr

EOFLINE . . . . . . . . . . . . NUMBER 0024

GREETING . . . . . . . . . . . . L BYTE 0010 DATA

HELLO . . . . . . . . . . . . . L BYTE 0000 DATA

MAIN . . . . . . . . . . . . . . F PROC 0005 CODE Length = 001B

WRITEMSG . . . . . . . . . . . . N PROC 0000 CODE Length = 0005

@CPU . . . . . . . . . . . . . . TEXT 0101h

@FILENAME . . . . . . . . . . . TEXT hello2

@VERSION . . . . . . . . . . . . TEXT 510

54 Source Lines

54 Total Lines

13 Symbols

46672 + 438572 Bytes symbol space free

0 Warning Errors

0 Severe Errors

Протокол пошагового исполнения программы под управлением отладчика:

Отладчик

Программа

Исходные данные

Измеряемые данные

регистр

до

после

IP

F1

push DS

DS 17B4

0005

F1

sub AX,AX

AX 0000

AX

0000

0000

0006

F1

push AX

AX 0000

0008

F1

mov AX,DATA

DATA 17B4

AX

0000

17C6

0009

F1

mov DS,AX

AX 17C6

DS

17B4

17C6

000C

F1

mov DX,OFFSET HELLO

AFFSET HELLO 0000

DX

0000

0000

000E

F1

call WriteMsg

0011

F1

mov AH,09

AH 17

AH

17

09

0000

F2

int21

0002

F1

ret

0004

F1

mov DX,OFFSET GREETING

AFFSET GREETING 0010

DX

0000

0010

0014

F1

call WriteMsg

0017

F1

mov AH,09

AH 17

AH

17

09

0000

F2

int21

0002

F1

ret

0004

F2

Ret Far

001A

F2

int21

0000

Вывод:

При выполнении лабораторной работы были рассмотрены основные этапы создания программы на языке Assembler: трансляция, компоновка загрузочного модуля и отладка. Так же рассматривалась структура и реализация каждого сегмента программы. Произведена отладка программы в пошаговом режиме с помощью отладчика.

Соседние файлы в папке Лабораторная работа №12