- •Применение системных функций в задачах программирования
- •Содержание
- •Использование программы 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.18. Программа на языке Ассемблера
DEBUG также можно использовать для ввода программ на языке Ассемблера. Рассмотрим команды DEBUG А и U, используемые для ввода выражений на языке Ассемблера в компьютер.
2.2.18.1. Команда a (Assemble)
Команда А приказывает DEBUG начать воспринимать ввод символьных инструкций и преобразовывать их в машинный код. Инициализируйте начальный адрес для инструкций в сегменте кода смещением 100Н с помощью команды
А 100 <Enter>
DEBUG выведет адрес сегмента кода и смещения (01 ООН) в виде хххх:0100. Введите следующие инструкции:
MOV CL,42 <Enter>
MOV DL,2A <Enter>
ADD CL,DL <Enter>
JMP 100 <Enter>
После ввода программы нажмите <Enter> еще раз для выхода из команды А. Это нажатие <Enter> указывает DEBUG, что вы больше не собираетесь вводить символьные инструкции. По завершении ввода DEBUG показывает адрес каждой введенной инструкции:
xxxx:0100 MOV CL,42
хххх:0102 MOV DL,2A
хххх:0104 ADD CL,DL
хххх:0106 JMP 100
хххх:0108
Перед выполнением программы воспользуйтесь командой U (Unassemble – дизассемблировать) для просмотра созданного DEBUG машинного кода.
2.2.18.2. Команда u
Команда U выводит на дисплей машинный код, соответствующий введенным символьным инструкциям. Можно использовать эту команду для указания первой и последней инструкций, которые нужно просмотреть, т.е. в данном случае это 0100Н и 0107Н. Введите команду
U 100,107 <Enter>
На экран будут выведены колонки адресов, машинных и символьных кодов, выглядящие приблизительно следующим образом:
xxxx:0100 B142 MOV CL,42
хххх:0102 В22А MDV DL,2A
хххх:0104 00D1 ADD CL,DL
хххх:0106 EBF8 JMP 100
хххх:0108
Теперь отследите выполнение машинного кода введенной программы. Начните с ввода команды R для просмотра содержимого регистров (IР должен содержать значение 0100Н) и следующей выполняемой инструкции (MOV CL,42). Затем последовательно вводите команды Т для выполнения инструкций. Когда дойдете до JMP 100, IР должен содержать 0106Н, a CL – 6СН.
2.2.19.Использование инструкции int
Следующие четыре примера показывают, как запрашивать информацию о системе. Для этого можно использовать инструкцию INT (interrupt – прерывание), которая осуществляет выход из программы, вызов подпрограммы DOS или BIOS, выполнение заданной функции и возвращение в программу. Есть разные типы операций INT, некоторые из них требуют наличия кода функции (function code) в регистре АН для выполнения определенного действия. Вместо использования команды Т для пошагового исполнения программ, используется команда Р (Proceed – продолжить) для выполнения всей программы обработки прерывания сразу. Убедитесь, что IP установлен в 0100Н.
2.2.20. Получение текущих значений даты и времени
Инструкция для получения текущих значений даты и времени – INT 21H, с кодом функции 2АН. Снова введите в DEBUG команду А 100, а затем - следующие инструкции:
M0V АН,2А <Enter>
INT 21 <Enter>
JMP 100 <Enter>, <Enter>
Введите R для просмотра регистров и Т для выполнения инструкции MOV. После этого введите Р для выполнения подпрограммы обработчика прерываний; выполнение остановится на инструкции JMP. Регистры будут содержать в шестнадцатеричной форме следующую информацию:
AL: день недели, где 0 = воскресенье
СХ: год (например, 07D7H = 2007)
DH: месяц (от 01Н до 0СН)
DL: день месяца (от 01H до 1FH)
Операция для получения текущего времени – INT 21H с кодом функции 2СН. Сначала используйте команду R IP для установки IP в 0100Н, а затем введите следующие команды:
А 100 <Enter>
MOV АН,2С <Enter>
INT 21 <Enter>
JMP 100 <Enter>
Выполните программу так же, как и предыдущую. Операция помещает число часов в СН (в 24-часовом формате, где 00 – полночь), минуты – в CL, секунды – в DH и сотые доли секунды – в DL.