Лабораторные работы по системному ПО

Страница: 6/6

АН=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. Постройте работающую программу и проверьте ее.

2.Измените программу так, чтобы программа MAINPRO передавала все три переменные, как параметры. Подпрограмма SUBPRO должна возвращать результат через параметр.

3.Составьте программу так, чтобы программа MAINPRO позволяла вводить количество (QTY) и общую стоимость (VALUE) с клавиатуры;

подпрограмма SUBCONV преобразовывала ASCII - числа в двоичное представление; подпрограмма SUBCALC вычисляла цену (PRICE);

подпрограмма SUBDISP преобразовала двойную цену, выводила результат на экран в коде ASCII.

Реферат опубликован: 17/02/2008