- •Применение системных функций в задачах программирования
- •Содержание
- •Использование программы dos debug для отладки и тестирования программ.
- •1. Цель работы
- •2. Теоретическая часть
- •2.1. Команды debug
- •2.2. Основные особенности программы debug.
- •2.2.1. Команда d (Display - показать) в программе debug
- •2.2.2. Упражнение 1: просмотр области данных bios
- •2.2.3. Проверка параллельных и последовательных портов
- •2.2.4. Проверка оборудования системы
- •2.2.5. Проверка состояния регистра клавиатуры (клавиша Shift)
- •2.2.6. Проверка состояния видеоустройства
- •2.2.7. Упражнение 2: Просмотр rom bios
- •2.2.8. Проверка даты производства bios
- •2.2.9. Упражнение 3: Использование непосредственных данных
- •2.2.10. Ввод инструкций программы
- •2.2.11. Выполнение инструкций программы
- •2.2.12. Просмотр содержимого памяти
- •2.2.13. Использование ранее определенных данных
- •2.2.14. Ввод инструкций и данных программы
- •2.2.15. Выполнение инструкций программы
- •2.2.16. Повторное выполнение инструкций
- •2.2.17. Сохранение программы в debug
- •2.2.18. Программа на языке Ассемблера
- •2.2.18.1. Команда a (Assemble)
- •2.2.18.2. Команда u
- •2.2.19.Использование инструкции int
- •2.2.20. Получение текущих значений даты и времени
- •2.2.21. Определение установленного оборудования
- •2.2.22. Использование int для вывода на дисплей
- •2.2.23. Использование int для ввода с клавиатуры
- •2.2.24. Использование оператора ptr
- •3. Порядок выполнения работы
- •4. Требования к отчету
- •5. Контрольные вопросы
- •Управление выводом текстовой информации на экран
- •1. Цель работы
- •2. Теоретическая часть
- •2.1. Текстовой (алфавитно-цифровой) режим
- •2.2. Вывод на экран средствами bios
- •2.2.1. Установка позиции курсора
- •2.2.2. Чтение текущей позиции курсора
- •2.2.3. Выбор активной страницы
- •2.3.4. Прокрутка экрана вверх
- •2.2.5. Прокрутка экрана вниз
- •2.2.6. Чтение символа и атрибута в текущей позиции курсора
- •2.2.7. Вывод символа и атрибута в текущую позицию курсора
- •2.2.8. Вывод символа в текущую позицию курсора
- •2.2.9. Вывод в режиме телетайпа
- •2.2.10. Выделение мерцанием и яркостью
- •2.2.11. Вывод символьной строки
- •2.2.12. Вывод символьной строки средствами dos
- •2.2.13. Вывод символов таблицы ascii
- •3. Порядок выполнения работы
- •4. Требования к отчету
- •5. Контрольные вопросы
- •Системные средства для вывода информации на экран в графическом режиме
- •1. Цель работы
- •2. Теоретическая часть
- •2.1. Режим средней разрешающей способности
- •2.2. Функции прерывания bios int 10h для графики
- •2.3. Вывод в цветном графическом режиме
- •3. Порядок выполнения работы
- •4 Требования к отчету
- •5. Контрольные вопросы
- •Программирование системных функций bios и dos для работы с клавиатурой
- •2.2.1.2. Справка о наличии символа
- •2.2.1.3 Определение текущего состояния клавиатуры
- •2.2.2 Системные функции dos для работы с клавиатурой
- •2.2.2.1 Ввод с клавиатуры с эхоотображением
- •2.2.2.2 Ввод символа без ожидания
- •2.2.2.3. Прямой ввод с клавиатуры без эхо
- •2.2.2.4. Проверка состояния клавиатуры
- •2.2.2.5. Получение строки символов
- •2.2.2.6. Очистка буфера клавиатуры и ввод символа
- •2.2.2.7. Установка позиции курсора
- •2.2.2.8. Очистка экрана
- •3. Порядок выполнения работы
- •4. Требования к отчету
- •5. Контрольные вопросы
- •Список литературы
- •Программа debug
- •I (Input)
- •Трансляция и компоновка программ
- •Применение системных функций в задачах программирования
- •450000, Уфа-центр, ул. К. Маркса, 12
2.2.24. Использование оператора ptr
В предыдущих примерах, помещавших данные в регистр, DEBUG мог определить, исходя из типа регистра (AL или АХ, например), сколько байтов необходимо переместить. Приведенная ниже программа помещает непосредственные данные в память. Поскольку инструкция вроде MOV [120],25 не указывает количества байт, для этой цели можно использовать оператор PTR. Вот инструкции программы:
100 MOV AX,[11A]
103 ADD AX,[11C].
107 ADD AX,25
10А MOV [11Е],АХ
10D MOV WORD PTR [120],25
113 MOV BYTE PTR [122],30
118 JMP 100
11A DB 14 23
11C DB 05 00
11E DB 00 00
120 DB 00 00 00
Ниже приведено описание инструкций.
100: Поместить содержимое ячеек памяти 11АН и 11ВН в АХ. Квадратные скобки указывают на то, что операнд - адрес в памяти, а не непосредственное значение.
103: Добавить содержимое ячеек памяти 11СН и 11ВН к АХ.
107:Добавить непосредственное значение 25Н к АХ.
10А: Поместить содержимое регистра АХ в ячейки памяти с адресами 11EH и11FH.
10D: Поместить непосредственное значение 25Н в ячейки памяти 120Н и 121Н. Оператор WORD PTR, указывает DEBUG, что значение 25Н должно быть помещено в слово в памяти. Если записать данную инструкцию в виде MOV [120],25, DEBUG не смогла бы определить, какая длина выделенного участка памяти подразумевалась, и вывела бы сообщение об ошибке.
113: Поместить непосредственное значение 30Н в ячейку памяти по адресу 122Н. На этот раз используется оператор BYTE PTR для указания длины в 1 байт.
11А: Определить значения байт 14Н и 23Н. DB определяет байты для элементов данных, на которые инструкции (например, первая) ссылаются.
11С, 11Е, и 120: Определить другие значения, используемые в программе.
Для ввода этой программы сначала введите команду DEBUG A 100, а затем последовательно введите все инструкции (но не адреса, с которых начинаются строки). В конце еще раз нажмите клавишу <Enter> для завершения ввода. Для выполнения программы сначала воспользуйтесь командой R для просмотра состояния регистров и первой инструкции, а затем используйте последовательность команд Т. Остановите выполнение, когда дойдете до команды JMP 100 по адресу 118Н. Командой D просмотрите содержимое области памяти программы и убедитесь, что изменилось содержимое АХ (23ЗН) и ячеек памяти с адресами 11EH-11FH (ЗЕ23), 120Н-121Н (2500) и 122Н (30). Введите Т для повторения программы или Q – для выхода.
3. Порядок выполнения работы
1. Область видеопамяти (Video Display Area) для цветного монитора в текстовом режиме начинается с адреса В800[0]. (а) Используйте команду DEBUG D для просмотра этой области памяти. Заметьте, что за каждым символом в этой области следует байт атрибутов (07Н для черно-белого режима). Используйте дополнительные команды D для просмотра всей области видеопамяти. (б) Используйте команду DEBUG F (Fill – заполнить) для вывода на экран 50 звездочек (символов * – код 2АН). Например, следующая команда заполняет всю видеопамять 4000 (FA0H) сердечками (03) и атрибутами (где 16H соответствует коричневым символам на синем фоне):
F B800:0 LFA0 03 16.
2. Рассмотрим следующие инструкции машинного языка:
В0 1С D0 E0 ВЗ 12 F6 ЕЗ ЕВ F6
Эти инструкции выполняют следующие действия.
(а) помещают 1СН в регистр AL,
(б) смещают регистр AL на один бит влево (эквивалент умножения на 2),
(в) помещают 12Н в регистр BL,
(г) умножают AL на BL.
Используйте команду DEBUG E для ввода этой программы, начиная с адреса CS:100. Затем введите D CS:100 для просмотра введенного кода. После этого введите R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ?
3. Используйте DEBUG для ввода следующей программы в машинных кодах:
Код (с адреса 100Н): А0 00 02 D0 E0 F6 26 01 02 A3 02 02 90
Данные (с адреса 200Н): 1E 16 00 00
Эта программа выполняет следующие действия: (а) помещает значение байта DS:0200H (1E) в регистр AL; (б) сдвигает содержимое AL на один бит влево; (в) умножает AL на байт, содержащийся в ячейке с адресом DS:0201H (16), (г) помещает произведение из АХ в слово, начинающееся с адреса DS:0202H.
Введите команды D для просмотра введенных кода и данных. После этого введите команду R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ? Введите еще одну команду D DS:0200 и посмотрите, в каком виде произведение хранится в памяти.
4. Для пункта 2, введите команды, записывающие программу на диск под именем HEXMULT.COM (см. приложение 1).
5. Используйте команду DEBUG А для ввода следующих инструкций:
MOV DX,2E
ADD DX,IF
SHL DX,01
SUB DX,BA
JMP 100.
Дизассемблируйте эти инструкции и проследите их выполнение вплоть до JMP, и просмотрите значение в регистре DX после выполнения программы.
6. Используйте DEBUG для создания и выполнения программы, выводящей на экран фразу "Coffee Break". Начните с А 100 для ввода инструкций и с А 120 для ввода фразы (не забудьте про ограничитель $).
7. Используйте DEBUG для создания и запуска программы, запоминающей три введенных с клавиатуры символа и выводящей их на экран.
(а) Начните с А 100.
(б) Используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [200].
(в) Опять используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [201].
(г) В третий раз используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [202].
(д) Используйте команду Е 123 '$' для установки ограничителя $ после трех введенных символов.
(е) Наконец, используйте INT 21 для вывода символов.