ЛР№1_СПО_Балыбердин_Н.А
..docxФГБОУ ВО Уфимский государственный авиационный технический университет
Кафедра АСУ
Лабораторная работа № 1
Тема: «ИСПОЛЬЗОВАНИЕ ПРОГРАММЫ DOS DEBUG ДЛЯ ОТЛАДКИ И ТЕСТИРОВАНИЯ ПРОГРАММ»
по дисциплине: «Системное программное обеспечение»
Выполнили: ст. гр. ИВТ-414
Балыбердин Н.А.
Проверил:
Преподаватель кафедры АСУ
Лянцев О.Д.
Уфа 2020
Цель работы: Целью настоящей работы является изучение возможностей
системной программы – отладчика DEBUG по программированию
компьютера IBM в машинных кодах.
Задания:
-
Область видеопамяти (Video Display Area) для цветного монитора в текстовом режиме начинается с адреса В800[0]. (а) Используйте команду DEBUG D для просмотра этой области памяти.
Используйте дополнительные команды D для просмотра всей области видеопамяти.
(б) Используйте команду DEBUG F (Fill – заполнить) для вывода на экран 50 звездочек (символов * – код 2АН).
F B800:0 L64 2a 16.
-
Рассмотрим следующие инструкции машинного языка:
В0 1С D0 E0 ВЗ 12 F6 ЕЗ ЕВ F6
Используйте команду DEBUG E для ввода этой программы, начиная с адреса CS:100. Затем введите D CS:100 для просмотра введенного кода. После этого введите R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ? Конечный результат в регистре AX=03f0
-
Используйте DEBUG для ввода следующей программы в машинных кодах:
Код (с адреса 100Н): А0 00 02 D0 E0 F6 26 01 02 A3 02 02 90
Данные (с адреса 200Н): 1E 16 00 00
Введите команды D для просмотра введенных кода и данных. После этого введите команду R и последовательными командами Т. Каков конечный результат в регистре АХ?AX=0528
Эта программа выполняет следующие действия: (а) помещает значение байта DS:0200H (1E) в регистр AL; (б) сдвигает содержимое AL на один бит влево; (в) умножает AL на байт, содержащийся в ячейке с адресом DS:0201H (16), (г) помещает произведение из АХ в слово, начинающееся с адреса DS:0202H
-
Для пункта 2, введите команды, записывающие программу на диск под именем HEXMULT.COM
-
Используйте команду DEBUG А для ввода следующих инструкций:
MOV DX,2E
ADD DX,IF
SHL DX,01
SUB DX,BA
JMP 100.
Дизассемблируйте эти инструкции и проследите их выполнение вплоть до JMP, и просмотрите значение в регистре DX после выполнения программы. Dx=ffe0
-
Используйте DEBUG для создания и выполнения программы, выводящей на экран фразу "Coffee Break". Начните с А 100 для ввода инструкций и с А 120 для ввода фразы (не забудьте про ограничитель $).
-
Используйте DEBUG для создания и запуска программы, запоминающей три введенных с клавиатуры символа и выводящей их на экран.
A 100
MOV AH, 10
INT 16
MOV [200], AL
XOR AX, AX
MOV AH, 10
INT 16
MOV [201], AL
XOR AX, AX
MOV AH, 10
INT 16
MOV [202], AL
XOR AX, AX
MOV AH, 09
MOV DX, 200
MOV BYTE PTR [203], 24
INT 21
JMP 100
Ответы на контрольные вопросы:
1. Объясните назначение следующих команд DEBUG: (а) А, (б) U, (в)
Р, (г) Т, (д) Q, (e) D, (ж) R, (з) Е.
(а) А - преобразовать инструкции символьного кода в машинный код;
(б) U - преобразовать (дизассемблировать) машинный код в
символьный.
(в) Р - продолжить или выполнить группу связанных инструкций;
(г) Т - отследить выполнение одной инструкции;
(д) Q - завершить сеанс работы с DEBUG;
(е) D - показать содержимое области памяти в шестнадцатеричном
формате;
(ж) R - показать содержимое одного или более регистров в
шестнадцатеричном формате;
(з) Е - ввести данные в память, начиная с определенного адреса.
2. Укажите команды DEBUG, с помощью которых можно сделать
следующее.
(а) Просмотреть содержимое всех регистров
– R
(б) Просмотреть содержимое регистра IP и установить его в 0100Н
– R IP
IP 0000
: 0100
(в) Просмотреть данные, хранящиеся в памяти, начиная со смещения
2ВСН в сегменте данных.
- D DS:2BC
(г) Просмотреть данные, находящиеся в памяти, начиная с ячейки с
адресом 3AFH. (Замечание: разделите этот адрес на части,
соответствующие сегменту и смещению.)
- D CS:3AF
(д) Дизассемблировать символьный код по адресам от 100Н до 12ВН.
- U 100,12B
(е) Ввести 24А63ВН в сегмент данных, начиная с адреса 18АН.
- E 18A 24A63B
3. Укажите машинный код, выполняющий следующие действия:
(а) прибавление непосредственного значения 03А8Н к АХ.
05 А8 03
(б) помещение значения 2СА4Н в регистр АХ.
В8 А4 2С
4. Предположим, введена такая команда DEBUG:
Е CS:100 B8 45 01 05 25 00
Значение 45 на самом деле должно было быть 54 Укажите команду,
изменяющую только этот байт, которая исправляет сделанную ошибку.
- E CS:101 54
5. Предположим, что в DEBUG введена следующая команда:
Е CS:100 B8 05 1В 05 00 2С ЕВ F8
(а) Какие три символьных инструкции здесь закодированы? (Первая
программа в работе содержит подсказку.)
mov ax, 1B05
add ax, 2C00
jmp 100
(б) При исполнении этой программы вы обнаруживаете, что в регистр
АХ помещается значение 4705 вместо ожидаемого 547 В чем состоит
ошибка и как ее исправить?
Нужно ввести команду Е в правильном виде. Ошибка может состоять в некорректных введенных данных. При загрузке данных из памяти в регистр первый байт идёт в младший регистр (AL), а второй в старший (AH), так как регистр AX имеет форму AH:AL мы ожидали что число запишется как 05:47, однако из памяти 2 байта (05 47) записались в регистр в обратном порядке (47:05), чтобы избежать такой ситуации следует записывать в память операнды в обратном порядке:
-E CS:100 B8 47 05
(в) Исправив ошибку, нужно повторно выполнить программу, начиная
С первой инструкции. Какие команды DEBUG необходимо использовать?
- R IP
100
T
6. Каково назначение инструкции INT?
INT (interrupt – прерывание), которая осуществляет выход из программы, вызов подпрограммы DOS или BIOS, выполнение заданной функции и возвращение в программу. Есть разные типы операций INT, некоторые из них требуют наличия кода функции (function code) в регистре АН для выполнения определенного действия. С помощью этой команды можно узнать дату и время, определить установленное оборудование, вводить с клавиатуры и выводить на экран данные.
Вывод: Мы изучили возможности системной программы – отладчика DEBUG по программированию компьютера IBM в машинных кодах.