ВУЗ:
Составители:
6. ОРГАНИЗАЦИЯ ОЧЕРЕДЕЙ, СТЕКОВ И ПОДПРОГРАММ
6.1. Очередь
Очередь представляет собой структуру данных, в которой элементы можно исключать только с одного конца (начало
очереди), а включать только с другого (конец очереди). Главная особенность очереди заключается в том, что она содержит
порядок элементов неизменным – принцип FIFO (First In, First Out – первый приходит, первый уходит). Число элементов в
очереди называется его длиной.
При реализации очереди её элементы остаются неподвижными, а вводятся два указателя для начала и конца очереди.
Указатель начала адресует элемент, подлежащий исключению, а указатель конца очереди адресует ячейку сразу за послед-
ним элементом. Очередь обычно используется при вводе и выводе символьных данных, а для их организации – область
смежных ячеек памяти, число которых определяется максимально возможной длиной очереди.
Чтобы исключить элемент очереди, необходимо произвести считывание элемента, адресуемого указателем начала оче-
реди, и увеличить этот указатель на 1 (очередь растёт в область больших адресов).
Включаемый элемент записывается в первую свободную ячейку и указатель очереди увеличивается на 1.
Возможны два особых случая: переполнение – включение в очередь элемента, когда все ячейки заняты, и антиперепол-
нение – исключение элемента из пустой очереди.
6.2. Стек
Стек, как и очередь, представляет собой специальную разновидность одномерного массива. Он является специальной об-
ластью ОЗУ, организованную таким образом, что загрузку элементов в стек и извлечение их из стека можно осуществлять
только с одного конца, называемого вершиной стека. Таким образом, в любой момент времени из стека можно произвести счи-
тывание только элемента, находящегося в его вершине и представляющего собой последние загруженные данные. Ячейку, вы-
полняющую роль вершины стека, адресует указатель стека SP. Таким образом, стек работает по принципу LIFO (Last In, First
Out – последний приходит, первый уходит).
6.3. Подпрограммы
Часто в программах некоторые последовательности команд, выполняющие определённую функцию, встречаются не-
сколько раз, но оперируют различными данными. Такие последовательности можно оформить в
подпрограмму
и включить в
программу один раз, а в нужных точках вызывать её для выполнения с текущими данными.
Вызов подпрограммы нарушает естественный порядок следования команд. Из точки вызова управление следует пере-
дать первой команде подпрограммы, затем обычным образом выполнить команды подпрограммы, а по её завершении управ-
ление необходимо передать (возвратить) в точку вызова. Инициирование выполнения подпрограммы осуществляется путём
указания её имени в одной из команд вызова подпрограммы. Имя подпрограммы должно находиться в поле метки первой её
команды. При выполнении команды вызова подпрограммы текущее содержание счётчика команд (адрес возврата) загружа-
ется в стек, а в счётчик команд загружается адрес перехода – второй и третий байт команды вызова подпрограммы. После
этого начинает выполняться первая команда подпрограммы, затем вторая и т.д. Заключительной командой каждой подпро-
граммы должна быть команда возврата из подпрограммы, которая извлекает адрес возврата из стека и передаёт его в счётчик
команд. Следовательно, теперь будет выполняться команда, находящаяся в вызывающей программе сразу после команды
вызова подпрограммы.
Правильно составленная подпрограмма не должна изменять содержимого ни одного регистра, которое после выполне-
ния подпрограммы потребуется вызывающей программе. Таким образом, содержимое регистров, используемых подпро-
граммой, необходимо временно запоминать, для того, чтобы по завершении подпрограммы его можно было восстановить
без изменений. Наиболее удобной памятью для временного запоминания содержимого регистров является стек. Запомнить
содержимое регистров можно в вызывающей программе перед вызовом подпрограммы либо в самой подпрограмме. Практи-
ка программирования показывает, что целесообразно всегда запоминать содержимое регистров в начале и восстанавливать
его в конце подпрограмм.
При организации подпрограмм важно выбрать правильный способ передачи параметров подпрограмме. В подпрограм-
ме умножения в курсовом проекте использована передача параметров во внутренних регистрах микропроцессора. При этом
способе перед вызовом подпрограммы параметры, используемые в подпрограмме, загружаются во внутренние регистры.
После вызова подпрограмма выполняет необходимые действия и загружает результат в определённый регистр (регистры)
микропроцессора. Основной недостаток данного способа заключается в жёстких ограничениях на число передаваемых пара-
метров.
Подпрограммы могут, например, использоваться для выполнения определённых арифметических действий: сложения и
вычитания, умножения и деления и т.д.
Подпрограмма умножения, используемая в курсовом проекте, имеет вид (табл. 3).
3. Пример программы (подпрограмма MULT)
Метка Код Операнд Комментарий
MULT LXI H, 0000H Сброс регистра произведения
NVI B, 08H Инициализация счётчика бит
M4: DAD H Сдвиг частичной суммы влево
RLC Сдвиг множителя с переносом
JNC M5 Анализ бита множителя
DAD D Суммирование множимого
M5: DCR B Декремент счётчика бит
JNZ M4 Умножение на следующий бит
RET Умножение закончено, возврат
Страницы
- « первая
- ‹ предыдущая
- …
- 5
- 6
- 7
- 8
- 9
- …
- следующая ›
- последняя »