- •Принципы организации ввода/вывода текстовых и числовых данных
- •2. Основные теоретические положения
- •2.1. Построение com файлов
- •2.2. Организация ввода-вывода
- •Функция овн. Проверка входного статуса клавиатуры
- •2.3. Ввод числовых данных
- •2.4. Процедуры
- •3. Задание на лабораторную работу и требования к отчету
2.4. Процедуры
Для решения проблемы дублирующихся участков кода и реализации структурного подхода к программированию используется механизм процедур. Процедура представляет собой группу команд для решения какой-либо подзадачи и обладает средствами получения управления из точки вызова задачи более высокого уровня и возврата в эту точку. Таким образом это однократно написанная совокупность команд, вызываемая из любой точки программы.
Для описания последовательности команд в виде процедуры используются директивы PROC и ENDP. В самом простом случае процедура может быть описана в виде:
<Имя процедуры> PROC
<Тело процедуры>
[Имя процедуры] ENDP
Передача параметров в процедуры и получение результатов может осуществляться несколькими способами:
Передача параметров через регистры.
Передача параметров через стек.
Передача параметров через глобальные переменные.
Возвращение результатов через регистр флагов.
Наиболее быстрый и эффективный способ передачи параметров – это передача через регистры. Но проблема состоит в том, что регистров очень ограниченное количество, поэтому не всегда имеется возможность воспользоваться этим способом.
Передача параметров через стек неудобна с той точки зрения, что необходимо всегда помнить точную последовательность помещения параметров, и доступ к ним более сложен, чем для регистровых параметров. К тому же всегда необходимо выделять достаточный объем стека, чтобы исключить возможность его переполнения.
Передача параметров через глобальные переменные используется в тех случаях, когда процедура ориентирована на работу в рамках четко определенной задачи, где состав глобальных переменных не изменяется. Такой подход позволяет сократить расходы на передачу параметров между процедурами.
Возвращение результата через регистр флагов применяется для информации об состоянии завершения процедуры в том случае, если необходимо вернуть булевское значение (истина/ложь) при этом экономятся регистры.
При построении процедур перед началом основных действий рекомендуется сохранять значения всех используемых регистров в стеке, чтобы обеспечить возможность использование процедуры в различных участках кода без контроля изменяемости параметров, в противном случае возможно возникновение трудно обнаруживаемых ошибок.
Более подробное описание механизма процедур в языке ассемблера будет рассмотрено в последующих лабораторных работах.
3. Задание на лабораторную работу и требования к отчету
В ходе выполнения лабораторной работы необходимо разработать программу, осуществляющую ввод и обработку цифровых данных по заданной формуле. Ввод исходных данных осуществляется с клавиатуры, вывод результатов обработки производится на экран компьютера. В программе должен осуществляться контроль за корректностью ввода данных, т.е. принадлежностью к заданным диапазонам вводимых значений, и правильностью выполнения преобразования - контроль за переполнением разрядной сетки в арифметических операциях. При возникновении ошибок должны выводиться соответствующие сообщения. Текст и формат сообщений придумать самостоятельно.
При выполнении лабораторной работы в программе разрешается использовать функции BIOS и DOS.
Программа должна быть написана для реального режима работы микропроцессора с использованием инструкций процессоров 8086 - 80286. Текст программы должен содержать комментарии и должен быть построен по принципу структурного программирования. Т.е. должны присутствовать процедуры ввода данных, перевода данных из числового формата в строковый и наоборот, а также процедуры математической обработки, которые могут быть использованы в других лабораторных работах. Обратите внимание, в последующих лабораторных работах использование функций DOS может быть запрещено.
Отчет по лабораторной работе должен содержать описание индивидуального задания, граф схемы алгоритмов с их описанием, текст программы с соответствующими комментариями и пример результатов работы.
Варианты представлены в табл. 1. Номер варианта берется в соответствии с порядковым номером в журнале по проведению лабораторных работ.
Таблица 1
Вариант |
Размер данных |
Знаковые данные |
Вариант преобразования |
1 |
Байт |
нет |
(A*B-C)/D |
2 |
Байт |
нет |
A/C-C*B |
3 |
Байт |
нет |
(A+B)*C/D |
4 |
Байт |
нет |
C*2/(A-B) |
5 |
Байт |
да |
D*A/(A+B) |
6 |
Байт |
да |
(A v B)*D/(C-1) |
7 |
Байт |
да |
(A-1)*2/(C*2+B) |
8 |
Байт |
да |
D*4/((A-C)*(B-1) |
9 |
Байт |
нет |
B*(A+B)/(C-D-1) |
10 |
Байт |
нет |
(C&D)xor(A&B)*D/(A+B) |
11 |
Байт |
нет |
((C*4) xor B)/(A*D) |
12 |
Байт |
нет |
(C-10*2/(D+B-A) |
13 |
Слово |
да |
(A*B-C)/D |
14 |
Слово |
да |
A/C-C*B |
15 |
слово |
да |
(A+B)*C/D |
16 |
слово |
да |
C*2/(A-B) |
17 |
слово |
нет |
D*A/(A+B) |
18 |
слово |
нет |
(A v B)*D/(C-1) |
19 |
слово |
нет |
(A-1)*2/(C*2+B) |
20 |
слово |
нет |
D*4/((A-C)*(B-1) |
21 |
слово |
да |
B*(A+B)/(C-D-1) |
22 |
слово |
да |
(C&D)xor(A&B)*D/(A+B) |
23 |
слово |
да |
((C*4) xor B)/(A*D) |
24 |
слово |
да |
(C-10*2/(D+B-A) |
Литература
П. Абель. Язык ассемблера для IBM PC и программирования. - М. Высшая школа, 1992.
Л. Скэнлон. Персональные ЭВМ IBM PC и XT Программирование на языке ассемблера. М. Радио и связь, 1992.
Н. Войников. Системное программирование для Правец-16. София Техника 1990
В. Кулаков. Программирование на аппаратном уровне. Специальный справочник. СПб Питер 2000.
В. Юров С. Хорошенко. Assembler учебный курс. СПб Питер 1999.
