Лабораторная работа №12 / Отчет_Л1
.docЗадание:
-
Просмотреть программу hello1.asm, приведенную в каталоге lab1 и разобраться в структуре и реализации каждого сегмента программы. Непонятные фрагменты прояснить у преподавателя. Строку-приветствие преобразовать в соответствии со своими личными данными.
-
Протранслировать программу с помощью строки
> masm hello1.asm
c созданием объектного файла и файла диагностических сообщений (файла листинга). Объяснить и исправить синтаксические ошибки, если они будут обнаружены транслятором. Повторить трансляцию программы до получения объектного модуля.
-
Скомпоновать загрузочный модуль с помощью строки
> link hello1.obj
-
Выполнить программу: - в автоматическом режиме путем набора строки
> 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: трансляция, компоновка загрузочного модуля и отладка. Так же рассматривалась структура и реализация каждого сегмента программы. Произведена отладка программы в пошаговом режиме с помощью отладчика.