Студентам > Рефераты > Лабораторные работы по системному ПО
Лабораторные работы по системному ПОСтраница: 2/3
MONTAB DB 'JAN',
'FEB', 'MAR', ..., 'DEC'.
Команда
XLAT транслирует содержимое одного байта в другое предопределенное значение. С
помощью команды XLAT можно проверить корректность содержимого элементов данных.
Команда XLAT предполагает адрес таблицы в регистре ВХ, а транслируемый байт
(например, поля ASCHO) - в регистре AL. Следующие команды выполняют
подготовку и трансляцию байта:
LEA ВХ, XLTBL
MOV AL, ASCHO
XLAT.
Команда
XLAT использует значение в регистре AL в качестве относительного адреса в
таблице, т.е. складывает адрес в ВХ и смещение в AL.
Содержание
задания
1. Имеются следующие данные:
DATAX DW 0148H
DW 2316H
DATAY DW 0237H
DW 4052H
Закодируйте команды для сложения:
а)
слово DATAX со словом DATAY;
б)
двойного слова, начинающегося по адресу DATAX , на слово DATAY.
2. Поле UNPAK содержит 01040705 в распакованном десятичном формате.
Напишите цикл, который преобразует это содержимое в ASCII - формат,
т.е. 31343735.
3.
Поле ASCA содержит значение 313733 в ASCII - формате,
а другое поле ASCB содержит 35. Напишите программу, перемножающую эти
числа в ASCII - формате и записывающую произведение в поле
ASCPRO.
4.
Определите 3 отдельные связанные таблицы, содержащие следующие данные:
а)
числовые элементы - 06,10,14,21,24;
б) элементы наименований - видеокассеты, приемники,
модемы, клавиатура, дискеты;
в)
цены - 93.95, 82.25, 90.67, 85.80, 13.85.
Составьте
программу, позволяющую вводить числовой элемент (ITEMIN) и
количество (QTYIN) с клавиатуры. Разработайте программу табличного
поиска элемента, равного ITEMIN. Выделите из таблиц наименование и цену. Рассчитайте
стоимость (количество х цена) и выведите на экран наименование и стоимость.
Лабораторная работа № 6
Изучение свойств дисковой памяти
Цель
работы: изучить основные требования к программированию функций DOS
для обработки дисковых файлов; функций BIOS для записи
и чтения дисковых файлов.
Общие
сведения.
Обработка
дисковых файлов в базовой DOS включает определение блока управления файлом (FCB - FILE CONTROL BLOCK),
который описывает файл и его записи. Передача адреса блока FCB в DOS обязательна для всех дисковых операций ввода -
вывода. Для выполнения операций ввода - вывода на диске в DOS
необходимо определить блок FCB в области данных, который используется главным
образом для обработки файлов в текущем каталоге. Блок FCB содержит описание
файла и его записей в приведенном ниже формате. Пользователь должен
инициализировать байты 0... 15 и 32...36, байты 16...31 устанавливаются
DOS:
Байты
назначение
0
Указывает дисковод: Код 01 - для дисковода А;
02- для В и т.д.
1...8
Имя файла
9...11
Тип файла для дополнительной идентификации
12...13 Номер текущего блока
14...15 Логический размер записи
16...19 Размер файла
20...21 Дата
22...31 Зарезервировано для DOS
32
Текущий номер записи в текущем блоке
33...36 Относительный номер записи
Для
ссылки на каждый дисковый файл программа должна содержать правильно
составленный блок управления файлом. Операции ввода - вывода на диск требуют
установки адреса блока FCB в регистре DX. Доступ к полям блока FCB
осуществляется по этому адресу с помощью регистровой пары DS:DX.
Для создания нового файла программа использует функцию 16Н в прерывании
DOS INT 21H следующим образом:
MOV АН, 16Н ; создание
LEA DX, FCBNAME
; дискового файла
INT 21H ; вызов
DOS
Система DOS осуществляет поиск по имени и типу файла, взятых из
соответствующих полей FCB в оглавлении. Если элемент оглавления, содержащий
необходимое имя (и тип) будет найден, то DOS очищает
найденный элемент для нового использования, если такой элемент не будет найден,
то DOS ищет свободный
элемент. Затем операция устанавливает размер файла в 0 и открывает файл. На
этапе открытия происходит проверка доступного дискового пространства, результат
проверки устанавливается в регистре AL:
00
на диске есть свободное пространство
FF на диске нет свободного
пространства
Аналогичным
образом программа использует в прерывании
DOS INT
21H следующие функции:
15Н
- Для последовательной записи на диск;
10Н
- Для закрытия файла;
OFH - Открытие файла;
14Н
- Для последовательного чтения записей с диска;
21H
- Для прямого чтения записи;
22Н
- Для прямой записи;
11Н
и 12Н - Поиск элементов оглавления;
13Н
- Удаление файла;
17Н
- Переименование файла;
0ЕН
- Установка текущего дисковода
Для
определения выводной записи необходимо прежде всего указать начальный адрес
области передачи данных (DTA - DISK TRANSFER AREA).
Затем с помощью функции 1АН необходимо сообщить DOS адрес DTA.
Активным может быть только один DTA.
MOV АН, 1АН ; установка
адреса
LEA DX, DTANAME ; DTA
INT 21H ; вызов DOS
Дисковые
операции можно программировать непосредственно на уровне BIOS.
Дисковая операция BIOS INT 13H рассматривает
все записи, как имеющие размер сектора, а адресацию диска осуществляет в
терминах действительных номеров дорожки и сектора. Для дисковых операций чтzения,
записи и верификации необходима инициализация следующих регистров:
АН
- тип операции: чтение, запись, верификация или форматирование;
AL - число секторов;
СН-
номер дорожки;
CL - номер головного сектора;
DH - номер головки (стороны): 0
или 1 для дискеты ;
DL - номер дисковода: 0=А, 1=В и
т. д.
ES: ВХ- адрес буфера ввода-
вывода в области данных.
Для
указания необходимой дисковой операции необходимо перед INT
13H загрузить в
регистр АН соответствующий код.
АН=00:
сброс системы контроллера дисковода
АН=01:
определить состояние дисковода
АН=02:
чтение секторов
АН=03:
запись секторов
АН=04:
верификация секторов
АН=05:
форматирование дорожек
Содержание
задания
1.
Напишите программу, которая создает дисковый файл, содержащий записи из трех
элементов: номера товара (пять символов), наименования товара (12 символов) и
стоимости единицы товара (одно слово). Ввод этих значений должен осуществляться
с клавиатуры.
2.
Напишите программу, которая выводит на экран файл, созданный в вопросе
3. Напишите
программу, выполняющую одно блочное чтение файла с приведенными ниже данными и
выводящую каждую запись на экран:
Номер
Цена Наименование
023
00315 Ассемблеры
024
00430 Компоновщики
027
00525 Компиляторы
049
00920 Компрессоры
114
11250 Редакторы
232
05635 Контроллеры
999
00000
4.
Измените программу из вопроса 3 так, чтобы цены записывались на диск в двоичном
формате.
5.
Напишите команды для BIOS INT 13H, выполняющие
чтение одного сектора в область памяти INDISK, с
дисковода А, головки 0, дорожки 6 и сектора 3.
6.
Напишите команды для BIOS INT 13H, выполняющие
запись трех секторов из области памяти OUTDISK на
дисковод В, головку 0, дорожку 8 и сектор 1.
Лабораторная работа №7
Изучение управления печатью
Цель
работы: изучить возможность программ на языке Ассемблер для вывода информации
на печатающее устройство
Общие
сведения.
Вывод
на принтер несколько проще, чем операции с экраном и диском. Для печати
существует несколько операций, выполняющихся через DOS INT 2IH и INT
17H. Команды, посылаемые на принтер, включают коды
"Прогон страницы", "Перевод строки" и "Возврат
каретки".
Принтеры
классифицируются по качеству печати. Матричный принтер формирует символы в виде
матрицы точек и обеспечивает нормальный, узкий и широкий форматы символов.
Более совершенные матричные принтеры обеспечивают точечную графику, наклонный
шрифт, жирную печать и двойную плотность, а также могут печатать графические
символы, напри -мер, символы игральных карт. Высококачественные печатающие
устройства ограничены набором символов на сменной "ромашке" или
барабане, но обеспечивают высокое качество печати и большое разнообразие
шрифтов. Лазерные принтеры обладают преимуществами как для матричной графики,
так и для качественной печати текстов.
Стандартные
символы управления печатью включают следующие:
08
- возврат на шаг
09
- горизонтальная табуляция
0А
- перевод строки
0B -
вертикальная табуляция
0С
- прогон страницы
0D - возврат каретки
Для
печати в базовой версии DOS необходимо установить в регистре АН код функции 05, а
в регистре DL -
распечатываемый символ, а затем выполнить команду INT 2IH
следующим образом
MOV АН, 05 ; запрос функции
печати
MOV DL, char
; распечатываемый символ
INT
2IH ; вызов DOS
С
помощью этих команд можно передавать на принтер управляющие символы. Однако,
печать обычно предполагает вывод полной или частичной строки текста и пошаговую
обработку области данных, отформатированной по строкам. Ниже показана программа
печати полной строки. Сначала в регистр SI загружается начальный адрес области
HEADG,
а в регистр СХ - длина этой области. Цикл, начинающийся по метке Р20, выделяет
очередной символ из области HEADG и посылает его на принтер. Так как первый
символ области HEADG - "возврат каретки", а последние два -
"перевод строки", то заголовок печатается в начале новой страницы и
после него следует двойной интервал:
HEADG DB OCH, INDUSTRIAL BICycle Mfrs’,
ODH, OAH, OАМ
LEA SI, HEADG; установка адреса и
MOV CX,
27 ; длины заголовка
Р20:
MOV АН,05 ; запрос функции печати
MOV DL, [SI] ;
символ из заголовка
INT 21H ;
вызов DOS
INT SI ;
следующий символ
LOOP P20
Пока
принтер не включен, DOS выдает сообщения "
out of paper". После включения питания программа начинает
работать нормально. Для прекращения печати можно нажать клавиши
CTRL/BREAK.
Прерывание BIOS INT 17H
обеспечивает три различные операции, определенные содержимым регистра АН:
АН=0:
Данная операция выполняет печать одного символа на три принтера по номерам 0,1
и 2 (стандартное значение - 0)
MOV
АН, 00 ; запрос функции печати
MOV AL, CHAR
; символ, выводимый на печать
MOV DX,
00 ; выбор принтера о
INT 17H ;
вызов BIOS
Если
операция не может распечатать символ, то в регистре АН устанавливается значение
01.
АН=1:
Инициализация порта печатающего устройства:
MOV
АН, 01 ; запрос на инициализации порта
MOV DX,
00 ;выбор порта о
INT
17H ; вызов BIOS
Данная
операция посылает на принтер символ "прогон страницы", поэтому ее
можно использовать для установки положения "начало страницы".
Большинство принтеров выполняют данную установку автоматически при включении.
АН=2:
Чтение состояния порта принтера:
MOV
АН, 02 ; функция чтения состояния порта
MOV DX,
00 ;выбор порта о
INT
17H ; вызов BIOS
TEST АН, 01101001В ; принтер
готов?
JNZ errmsg
; нет - выдать сообщение
В
процессе работы принтер может выйти за страницу или быть нечаянно выключен.
Поэтому в программах печати следует предусмотреть проверку состояния принтера
перед каждой проверкой печати.
Содержание
задания
Напишите
программу для DOS, выполняющую: а) прогон страницы; б) Печать вашего
имени; в) перевод строки и печать вашего адреса; г) перевод строки и печать
названия вашего города; д) прогон страницы.
2.
Закодируйте строку, в которой имеется следующая информация: возврат каретки,
прогон страницы, включение узких букв (OF), заголовок
(ваша фамилия) и выключение узких букв (12).
3.
Измените программу из вопроса 1 для использования BIOS INT
17H. Обеспечьте проверку состояния принтера.
4.
Измените программу из вопроса 1 так, чтобы пункты б), в), г), выполнялись по 5
раз.
Лабораторная
работа №8.
Изучение
связей между подпрограммами.
Цель работы. Раскрыть технологию
программирования, включающую компоновку и выполнение программ.
Общие
сведения.
Возможно выполнение программного
модуля, состоящего из нескольких ассемблированных программ. В этом случае
программу можно рассматривать как состоящую из основной программы и одной или
более подпрограмм. Причины такой организации программ состоят в следующем:
- необходимо скомпоновать программы, написанные на разных
языках, например, для объединения мощности языка высокого уровня и
эффективности ассемблера;
- программа, написанная в виде одного модуля, может оказаться
слишком большой для ассемблирования;
- отдельные части программы могут быть написаны на разными
группами программистов, ассемблирующих свои модули раздельно;
- ввиду возможного большого размера выполняемого модуля может
появиться необходимость перекрытия частей программы в процессе выполнения.
Каждая программа ассемблируется и
генерирует собственный универсальный объект (OBJ) модуль. Программа-компоновщик (LINK) затем компонует объектные модули в один объединенный
выполняемый (ЕХЕ) модуль. Обычно выполнение начинается с основной программы,
которая вызывает одну или более подпрограмм. Подпрограммы, в свою очередь,
могут вызывать другие подпрограммы.
Для межсегментного вызова используется
команда CALL. Данная операция сначала записывает в
стек содержимое регистра CS и заносит в этот регистр адрес другого сегмента, затем
записывает в стек значение регистра ТР и заносит новый относительный адрес в
этот регистр.
Таким образом, в стеке запоминаются и
адрес кодового сегмента, и смещение для последующего возврата из подпрограммы.
Например, межсегментный вызов CALL может состоять из следующего
объектного кода:
9А 002 AF04
Шестнадцатеричное число 9А
представляет собой код команды межсегментного вызова, которая записывает
значения 0002 в виде 0200 в регистр IP, а значение AF04 в виде 04
AF - в регистр CS. Комбинация этих адресов
указывает на первую выполняемую команду в вызываемой подпрограмме:
кодовый
сегмент 04AF0
смещение
в IP 0200
действительный
адрес 04CF0
При выходе из вызванной процедуры
межсегментная команда возврата REP
восстанавливает оба адреса в регистрах CS и IP и таким образом передает управление наследующую после
CALL команду.
Содержание
задания
1. Программа MAINPRO должна вызвать
подпрограмму SUBPRO. В программе MAINPRO
определены переменные QTY как DB,
VALUE как DW и PRICE
как DW. Подпрограмма SUBPRO должна
разделить VALUE на QTY и записать частное
a PRICE.
Постройте работающую программу и проверьте ее.
|