
- •В.А. Афанасьев
- •Часть 1 Лабораторный практикум
- •Предисловие
- •1. Краткая характеристика операционной среды ms-dos в компьютерах с операционной системой Windows
- •2. Составные части ms-dos и её инициализация
- •3. Взаимодействие Ассемблерной программы с ms-dos и аппаратными средствами Компьютера
- •4. Сегментированная организация памяти в реальном режиме. Виды памяти в среде ms-dos
- •Распределение первого мегабайта памяти компьютера
- •Содержание некоторых полей области данных bios
- •5. Программная модель 32-разрядных процессоров i80x86
- •Назначения сегментных регистров
- •6.2.2. Путь выполнения команды
- •6.2.3. Трансляция программы. Опции командной строки
- •6.2.4. Структура программы для .Exe- и .Com-файлов. Образ программы в памяти
- •Сегменты упрощенной модели памяти Small
- •%Title "Имя exe-файла программы"
- •%Title "Имя com – файла программы"
- •6.2.5. Работа с отладчиком Turbo Debugger (td)
- •6.2.6. Форматы машинных команд и их кодирование
- •Определение эффективного адреса
- •Косвенные виды адресации
- •6.2.6.2. Использование 32-битных регистров
- •6.2.7. Работа над синтаксическими ошибками при ассемблировании программы
- •6.3. Задание к работе. Порядок выполнения
- •6.4. Контрольные вопросы
- •Приложения к лабораторной работе № 1 п.1.1. Машинные коды команд базового процессора i8086
- •Машинные коды команд базового процессора i8086
- •П.1.2. Демонстрационные файлы
- •П.1.3. Форматы исполняемых файлов .Exe и .Com на диске
- •А) Листинг prog_com. Lst
- •Содержимое префикса программы psp
- •А) Листинг prog_exe.Lst
- •Б) Машинный код исполняемого файла prog_exe.Exe на диске объёмом 624 байта
- •Формат заголовка исполняемого .Exe – файла на диске
- •7.2.2. Ввод с клавиатуры символьной информации
- •7.2.2.1. Буфер ввода данных с клавиатуры
- •7.2.2.2. Системные функции dos ввода данных с клавиатуры
- •Сравнительная характеристика функций dos ввода с клавиатуры
- •7.2.3. Функции dos вывода данных на экран
- •7.2.4. Расширенные коды ascii и управление программой с клавиатуры
- •Расширенные коды для функциональных клавиш
- •7.2.5. Строковые команды. Общая характеристика
- •Команды обработки строк
- •7.3. Задания к работе. Подготовка и выполнение
- •7.4. Контрольные вопросы
- •Приложения к лабораторной работе № 2 Приложение п.2.1. Примеры реализаций типового задания
- •Приложение п.2.2. Esc-последовательности
- •Параметры Esc-последовательности
- •Приложение п.2.3. Таблица символов в кодировке ascii
- •8.2.2. Прямое программирование видеобуфера в текстовом режиме
- •8.2.3. Справочные данные по функциям bios
- •8.2.3.1. Прерывание int 10h. Видеофункции bios
- •Текстовые видеорежимы и страницы в стандарте vga, поддерживаемые современными видеоконтроллерами
- •8.2.3.2. Рекомендации по использованию видеосервиса bios
- •8.2.3.3. Прерывание int 16h
- •8.2.3.4. Задержка программных операций
- •Int 15h, функция 86h
- •8.3. Варианты индивидуального задания
- •8.4. Контрольные вопросы
- •Приложения к работе № 3 Примеры реализаций типовых заданий п.3.1. Листинг 3.4. Программа получения скан-кодов клавиш клавиатуры
- •П.3.2. Листинг 3.5. Демонстрационная программа использования функций bios для работы с экраном и клавиатурой
- •9.2.1. Представление знаковых и беззнаковых чисел в 16-разрядном компьютере
- •Представление чисел в 16- разрядном компьютере
- •9.2.2. Преобразование ascii-кодов чисел с произвольным основанием в двоичное число
- •9.2.3. Преобразование двоичного числа в ascii-строку числа по произвольному основанию
- •9.2.4. Задание к работе. Порядок выполнения
- •Варианты заданий 1-7
- •Варианты заданий 8-14
- •9.2.5. Вопросы построения многомодульных программ
- •9.2.6. Ассемблирование и компоновка отдельных модулей в программу. Создание библиотеки объектных модулей
- •9.3. Контрольные вопросы
- •Список использованной и рекомендуемой Литературы
- •Оглавление
8.4. Контрольные вопросы
Краткая характеристика возможностей, предоставляемых программисту базовой системой ввода-вывода BIOS, в сравнении с сервисными функциями DOS.
Назовите объём видеопамяти для изображения одного символа и, соответственно, одной видеостраницы монитора в текстовом режиме.
Дайте характеристику атрибута символа в видеобуфере.
Разработайте макросы для:
очистки экрана с установкой курсора в левый верхний угол экрана;
позиционирования курсора в произвольную точку экрана с запоминанием его координат в памяти с помощью переменных row и clm;
вывода сообщения mes длиною leng и атрибутом цвета attrib с позиции, определяемой переменными row и clm.
Какая функция BIOS предоставляет пользователю исчерпывающую информацию о нажатой клавише клавиатуры.
Приложения к работе № 3 Примеры реализаций типовых заданий п.3.1. Листинг 3.4. Программа получения скан-кодов клавиш клавиатуры
Программа выводит на экран в виде четырёх 16-теричных чисел скан-код и ASCII-кода произвольной клавиши клавиатуры на основе использования функции BIOS 10h, Int 16h (101/102-key).
Вызов: AH = 10h, Int 21h.
Возврат: AL = ASCII-код символа, изображённый на клавише/Код признака расширения (00h/0Ah/0Dh или E0h);
AH = скан-код/расширенный ASCII-код клавиши.
При выводе на экран старшая пара цифр отделяется от младшей пробелом и сопровождается сообщением "Скан-код (расширенный ASCII-код)/ASCII-код (00h/0Ah/0Dh или E0h)".
Ideal
Model small
Stack 256
macro out_str mes
mov ah,09h
lea dx,[mes]
int 21h
Endm out_str
Dataseg
table_hex db '0123456789ABCDEF'
buf_hex db 5 DUP(?)
mes1 db 10,13,'Скан-код (расш. ASCII-код)/ASCII-код (00h/0Ah/0Dh или E0h): $'
Codeseg
Start: mov ax,@data ;Установка в ds адреса
mov ds,ax ;сегмента данных
again: mov ah,10h
int 16h ;АХ<- информ-код клавиши после её нажатия
cmp al,1Bh ;Нажата клавиша <Exc>?
je Exit ;Да, выходим из программы
mov dx,ax ;Нет, продолжаем работу. Сохраним АХ
mov al,dh ;Возьмём старший байт информ-кода для преобразования.
call conv_hex ;Процедура преобразования двоичного кода из AL
;в пару 16-теричных ASCII- цифр в регистре АХ
mov [word buf_hex],ax ;Запомним старшую пару ASCII- чисел в младших
;байтах буфера. При этом в AH должна располагаться младшая цифра. Это связано с особен-
;ностью записи информации из регистра в буфер памяти – старшая часть регистра записыва-
;ется по старшему адресу.
mov [byte buf_hex+2],' ' ;Запись пробела
mov al,dl ;Возьмём младший байт информ-кода для преобразования.
call conv_hex
mov [word buf_hex+3],ax ;Запомним младшую пару ASCII- чисел в старших
;байтах буфера
out_str mes1 ;Вывод сообщения mes1
;Вывод информационного кода
mov ah,40h
mov bx,1
mov cx,5
lea dx,[buf_hex]
int 21h
jmp again ;Обработка следующей клавиши
Exit: mov ax,4C00h ;Функция DOS 4Сh: выход из программы
int 21h ;Вызов DOS. Останов
Proc conv_hex
;Процедура преобразования двоичного кода из регистра AL в пару 16-теричных ASCII-цифр
;в регистре АХ на основе использования команды XLAT
push dx ;Сохраним DX
mov bx,offset table_hex
mov ah,0
mov cl,4
shl ax,cl ;AH <- старшая двоичная тетрада
shr al,cl ;AL <- младшая двоичная тетрада
xlatb ;AL <- младшая 16-теричная ASCII- цифра
mov dh,al ;Сохраним в старшей части DX
mov al,ah
xlatb ;AL <- старшая 16-теричная ASCII- цифра
mov dl,al ;Сохраним
mov ax,dx
pop dx ;Восстановим DX
ret
Endp conv_hex
END Start ;Конец программы/точка входа