Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_2.docx
Скачиваний:
2
Добавлен:
20.11.2019
Размер:
881 Кб
Скачать
☆

Выполнение работы.

1. Создаём каталог 1_IT-30.

2. Помещаем в него файлы TASM.exe, TD.exe, TLINK.exe, RTM.exe и текстовый документ MS-DOS PRG_5_2.txt с кодом программы.

3. Запускаем на трансляцию нашу программу командной строкой «tasm.exe /zi prg_5_2,,,»

4. Просматриваем листинг программы:

5. Создаём исполняемый модуль PRG_5_2.ехе командной строкой «tlink.exe /v prg_5_2.obj» :

6. Запускаем отладчик командной строкой «td prg_5_2.ехе» :

7. Настроив отладчик на адрес сегмента данных, вызываем окно «Dump», в котором переходим на нужный адрес памяти ds:0000. С него будет выводиться информация в окне «Dump»:

Символы в сегменте данных, входящие в строку «Message», как раз начинаются с адреса ds:0000. Данная строка имеет размерность 34 байта:

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

Символическое имя «perem_1» имеет адрес ds:0024 в сегменте данных, в нём хранится байт FF:

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

Байты, входящие в слово с символическим именем «perem_2», в памяти расположены по принципу «младший байт по младшему адресу», в отличие от формы записи в тексте программы 3A7Fh:

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

Следом за этими двумя байтами идут байты поля «perem_3» по такому же принципу: от младшего 7А до старшего F5. При том в листинге видно, что под имя «perem_3» зарезервировано ровно 4 байта памяти, благодаря прописанной директиве резервирования и инициализации данных dd.

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

*************************

perem_3 dd 0f54d567ah

*************************

В поле «mas» мы видим идущие подряд 10 символов-пробелов (с ASCII-кодом 20). Это достигнуто благодаря оператору-счётчику dup, прописанным перед ним числом 10 и символу пробела в скобках, взятого в кавычки:

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

*************************

mas db 10 dup (« »)

*************************

Схожим образом обстоит дело со следующей строкой «pole_1», где вместо десяти пробелов прописаны пять пустых байтов (со значением 00). Символ незаполненного байта в листинге - ?:

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

*************************

Pole_1 db 5 dup («? »)

*************************

Директивы «adr» и «adr_full» формируют в памяти значения адресов тех переменных, чьи имена были указаны в качестве операндов. В зависимости от директивы, применяемой для получения такого адреса, формируется либо полный адрес (директива adr_full и dd) в виде двух байтов сегментного адреса и двух байтов смещения, либо только смещение (директива adr и dw).

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных пр

*************************

adr dw perem_3

adr_full dd perem_3

*************************

Красным выделено смещение от начала поля «perem_3» - ячейка 0027 (вновь по принципу «младший байт по младшему адресу») в директиве adr в виде двух байтов.

Бордовым выделены два байта смещения 27 00 и два байта полного адреса «perem_3» директивы adr_full.

Строка «fin»: Конец сегмента данных программы $

Dump

ds: 0000 87 A0 AF E3 E1 E2 A8 E2 Запустит

ds: 0008 A5 20 ED E2 E3 20 AF E0 е эту пр

ds: 0010 AE A3 E0 A0 AC AC E3 20 ограмму

ds: 0018 A2 20 AE E2 AB AO A4 E7 в отладч

ds: 0020 A8 AA A5 24 FF 7F 3A 7A ике$ :z

ds: 0028 56 4D F5 20 20 20 20 20 VMI

ds: 0030 20 20 20 20 20 00 00 00

ds: 0038 00 00 27 00 27 00 60 0B ‘ ‘ B

ds: 0040 8A AE AD A5 E6 20 E1 A5 Конец се

ds: 0048 A3 AC A5 AD E2 A0 20 A4 гмента д

ds: 0050 A0 AD AD EB E5 20 AF E0 анных программы $

ds: 0058 AE A3 EO A0 AC AC EB 20

ds: 0060 24 00 00 00 00 00 00 00

Вывод: Изучили директивы описания данных простых типов; с помощью окна Dump отладчика tdebug.exe просмотрели область памяти, содержащую сегмент данных программы.