- •Применение системных функций в задачах программирования
- •Содержание
- •Использование программы 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.12. Вывод символьной строки средствами dos
Вывод текста на экран средствами DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 (вызов функции DOS) и указания команды DOS INT 21Н. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:
NAMSTUD DB ’Имя студента’,’$’
.
.
MOV АН,09 ;3апрос вывода на экран
LEA DX,NAMSTUD ;3агрузка адреса сообщения
INT 21H ;Вызов DOS
Знак ограничителя '$' можно кодировать непосредственно после символьной строки, как показано в примере, внутри строки 'Имя покупателя?$' или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$", Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретится в памяти.
Команда LEA загружает адрес области NAMSTUD в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля NAMSTUD, загружаемый в DX по команде LEA, является относительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).
2.2.13. Вывод символов таблицы ascii
Большая часть из 256 символов ASCII имеют символьное представление и могут быть выведены на экран. Некоторые значения, например, 00H и FFH, не соответствуют никаким выводимым символам и представляются на экране как пробел, хотя пробел имеет в ASCII особый код – 20Н. Ниже приведена программа, которая выводит на экран все символы ASCII-таблицы.
TITLE A08DISAS (СОМ) Вывод набора символов ASCII
.MODEL SMALL
.CODE
ORG 100H
BEGIN: JMP SHORT A10MAIN
ASCHAR DB 00, '$'
; Главная процедура:
.286
A10MAIN PROC NEAR
CALL B10SCREEN ;Очистка экрана
CALL C10CURSOR ;Установка курсора
CALL D10DISPLY ;Вывод символов
MOV AX,4C00H ;Завершение работы
INT 21H
A10MAIN ENDP
; Очистка экрана и установка атрибутов:
BIOSCREEN PROC NEAR
PUSH A ;Сохранение значений регистров
MOV AX,0600H ;Прокрутка целого экрана
MOV BH,07 ;Атрибуты: белый шрифт на черном фоне
MOV CX,0000 ;Верхний левый угол
MOV DX,184FH ;Нижний правый угол
INT 10Н ;Вызов обработчика прерывания
POP A ;Восстановление значений регистров
RET ;Возврат к точке вызова
BIOSCREEN ENDP
; Установка курсора в ячейку 08,00:
C10CURSOR PROC NEAR
PUSHA ;Сохранение значений регистров
MOV АН,02Н ;Запрос на установку курсора
MOV ВН,00 ;Страница 0
MOV DX,0800H ;Строка 8, столбец 0
INT 10Н ;Вызов обработчика прерывания
POPA ;Восстановление значений регистров
RET ;Возврат к точке вызова
C10CURSOR ENDP
; Вывод символов ASCII 00Н - FFH, кроме символов от 08Н до 0DH:
D10DISPLY PROC
PUSHA ;Сохранение значений регистров
MOV СХ,256 ;Подготовить 256 повторений
LEA DX,ASCHAR ;Указать адрес ASCHAR
D20: CMP ASCHAR,08Н ;Код символа меньше 08Н?
JB D30 ;Да, вывести
CMP ASCHAR, 0DH ;Код символа меньше или равен 0DH?
JBE D40 ;Да, пропустить
D30: MOV АН,09Н ;Вывод ASCII-символа
INT 21Н
D40: INC ASCHAR ;Перейти к следующему символу
LOOP D20 ;Уменьшить значение в СХ,
;повторить, если не ноль
POPA ;Восстановление значений регистров
RET ;Возврат к точке вызова
D10DISPLY ENDP
END BEGIN