- •Лабораторная работа №1 Архитектура процессора Intel 8086.
- •Структура exe- и com- программы. Вывод на экран
- •Теоретические сведения Структура программы
- •Вывод на экран
- •Прерывание 21h.
- •Прерывание 10h.
- •Лабораторная работа №2 Циклы. Ввод с клавиатуры
- •Теоретические сведения Циклы в ассемблерных программах
- •Ввод с клавиатуры
- •Ввод чисел, перевод чисел в различные системы счисления
- •Теоретические сведения Ввод числовой информации
- •Перевод чисел в различные системы счисления
- •Лабораторная работа №3 Подпрограммы, работа с файлами через описатели.
- •Теоретические сведения Подпрограммы
- •Работа с файлами
- •Работа с файлами, используя dta. Psp. Окружение
- •Теоретические сведения Структура dta
- •Структура psp
- •Окружение dos
- •Лабораторная работа №4 Работа с прерываниями: перехват и восстановление.
- •Теоретические сведения Прерывания и их переопределение
- •Видеопамять
- •Порты ввода-вывода. Обмен данными с внешним устройством.
- •Теоретические сведения Команды ввода и вывода
Структура psp
Префикс программного сегмента PSP (Program Segment Prefics) – специальная область оперативной памяти размером 256 (100h) байт. PSP может использоваться в программе для определения имен файлов и параметров из командной строки, введенной при запуске программы на выполнение, объема доступной памяти, переменных окружения системы и так далее. После загрузки программы в память сегментные регистры DS и ES указывают на начало PSP этой программы.
Таблица. Структура PSP
Сме-щение |
Длин-на |
Содержимое |
+0 |
2 |
INT 20 (EXE-программы могут делать сюда JMP или RET для выхода) |
+2 |
2 |
вершина доступной памяти системы в параграфах |
+4 |
1 |
резервируется |
+5 |
5 |
FAR CALL к диспетчеру функций DOS |
+6 |
|
доступные байты в программном сегменте (только для файла COM) |
+0ah |
4 |
адрес завершения |
+0eh |
4 |
адрес обработки Ctrl-Break |
+12h |
4 |
обработчик критических ошибок |
+16h |
16h |
резервная область DOS |
+2ch |
2 |
сегментный адрес окружения DOS |
+2eh |
2eh |
резервная область DOS |
+5ch |
10h |
форматированная область параметра1 |
+6ch |
14h |
форматированная область параметра2 |
+80h |
1 |
длина области UPA (с адреса 81H) также смещение умалчиваемой DTA |
+81h |
7fh |
символы из командной строки DOS (исключая директивы переназначения) |
100h |
|
Размер префикса программного сегмента |
Окружение dos
DOS поддерживает область памяти, содержащую набор строк ASCIIZ, которые могут использоваться приложениями для получения некоторой системной информации и для передачи данных между программами. Эта область памяти называется окружением DOS.
Структура окружения DOS:
имя_1=значение_1«0»
имя_2=значение_2«0»
. . .
имя_N=значение_N«0»
«0»
«xxxx»
EXEC_string_1«0»
. . .
EXEC_string_NN«0»
«0»
Здесь «0» - это символ ASCII NUL (00H), а «xxxx» - 16-битовое двоичное значение (количество дополнительных строк).
Окружение не превышает 32K байт и начинается на границе параграфа. Смещение 2cH в PSP текущей программы содержит номер параграфа окружения. Используя окружение, можно найти нужное имя' серией сравнений строк ASCIIZ, пока не достигнута пустая строка (нулевой длины), что указывает конец окружения.
В последних версиях DOS, за концом официального окружения помещается дополнительная строка, которая содержит диск и путь, с которых была загружена программа. Вслед за последней строкой ASCIIZ окружения находится нулевой байт, указывающий конец официального окружения. Следующие два байта содержат 16-битовый двоичный счетчик дополнительных строк (обычно 0001H). Вслед за значением счетчика находится строка ASCIIZ, содержащая путь и имя файла. Это в точности та строка, которая использовалась функцией DOS 4bH (EXEC) для загрузки и запуска программы.
Лабораторная работа №4 Работа с прерываниями: перехват и восстановление.
Цель. Изучить алгоритм переопределения и восстановления прерываний.
Задание. Разработать программу переопределения прерывания 05h (клавиша PrintScreen).
Замечания:
перед загрузкой нового вектора прерывания необходимо сохранить старый вектор (функция 35h прерывания 21h);
для проверки, новая процедура обработки прерывания 05h должна выполнять действия в соответствии с вариантом задания. В основной программе необходимо организовать большой цикл, в течении которого можно будет проверить работы прерывания (прерывание 21h в этом цикле использовать нельзя, если оно будет использоваться в подпрограмме обработки прерывания;
вывод на экран в из подпрограммы обработки прерывания, можно выполнять, используя функции прерывания 21h, но лучше непосредственно оперируя с видеопамятью;
перед выгрузкой программы из памяти восстановить старый вектор прерывания (функция 25h прерывания 21h).
Таблица. Варианты заданий
-
Вариант
Задание
1
Подпрограмма обработки прерывания должны выводить звуковой сигнал (символ с кодом 7 на экран).
2
Подпрограмма обработки прерывания должны подсчитывать количество своих вызовов и выводить номер вызова.
3
Подпрограмма обработки прерывания должны выводить на экран время текущего вызова (функция 2сh прерывания 21h).
4
Подпрограмма обработки прерывания должны выводить на экран текущую дату (функция 2ah прерывания 21h).
5
Подпрограмма обработки прерывания должны выводить на экран строку, которую пользователь задает при загрузке программы в память.
6
Подпрограмма обработки прерывания должны выводить на экран время загрузки программы в память (время читается и сохраняется при запуске программы функцией 2сh прерывания 21h).
7
Подпрограмма обработки прерывания должны выводить на экран имя программы. (Имя читается, например, из окружения DOS при загрузке программы в память).
8
Подпрограмма обработки прерывания должны выводить на экран содержимое регистра флагов в двоичной или другой, удобной для восприятия форме.
9
Подпрограмма обработки прерывания должны выводить на экран свой адрес в шестнадцатеричной системе счисления в форме «сегмент:смещение». (Эти данные можно прочитать из 5 ячейки таблицы векторов прерывания).
10
Подпрограмма обработки прерывания должны выводить на экран номер версии DOS (функция 30h прерывания 21h).