Микропроцессоры. Управляющие сигналы и принцип работы микропроцессоров, страница 14

            Допустимыми значениями R1 будут B, D, H, PSW. В случае обращения STACK SP будет получено сообщение об ошибке.


            5.4. Организация массивов, очередей и стеков

            1. Массивы. Одномерный массив представляет собой набор элементов данных одинаковой длины, который размещается в смежных ячейках области памяти с начальным (базовым) адресом BASE. Число элементов в массиве на­зывается его длиной. Положение любого элемента в массиве характеризуется его порядковым номером, называемым индексом или смещением. Адрес эле­мента равен сумме базового адреса BASE и индекса IND, умноженного на длину элемента в байтах. На практике целесообразно применять массивы, длина элементов которых равна степени двух. Тогда при вычислении адреса элемента операция умножения заменяется сдвигами. В наиболее простых массивах длина элементов составляет 1 байт.

            Формирование и обработка массивов осуществляются циклическими программами, состоящими из трех частей: инициализации, обращения к теку­щему элементу, перехода к следующему элементу и проверки условия оконча­ния цикла.

Подпись: BASE

                                                                                                                           

            Рис.7. Размещение массива в памяти


            2. Очередь. Очередь представляет собой структуру данных, в которой элементы можно исключать только с одного конца (начало очереди), а включать только с другого (конец очереди). Главная особенность очереди заключается в том, что она содержит порядок элементов неизменным — принцип FIFO (first in, first out — первый приходит, первый уходит). Число элементов в очереди на­зывается его длиной.

            При реализации очереди ее элементы остаются неподвижными, а вво­дятся два указателя для начала и конца очереди. Указатель начала адресует эле­мент, подлежащий исключению, а указатель конца очереди адресует ячейку сразу за последним элементом. Очередь обычно используется при вводе и вы­воде символьных данных, а для их организации — область смежных ячеек па­мяти, число которых определяется максимально возможной длиной очереди.

            Чтобы исключить элемент очереди, необходимо произвести считывание элемента, адресуемого указателем начала очереди, и увеличить этот указатель на 1 (очередь растет в область больших адресов).

            Включаемый элемент записывается в первую свободную ячейку и указа­тель очереди увеличивается на 1.

            Возможны два особых случая: переполнение — включение в очередь элемента, когда все ячейки заняты, и антипереполнение — исключение эле­мента из пустой очереди.

            3. Стек. Стек, как и очередь, представляет собой специальную разновид­ность одномерного массива. Он является специальной областью ОЗУ, организо­ванную таким образом, что загрузку элементов в стек и извлечение их из стека можно осуществлять только с одного конца, называемого вершиной стека. Та­ким образом, в любой момент времени из стека можно произвести считывание только элемента, находящегося в его вершине и представляющего собой по­следние загруженные данные. Ячейку, выполняющую роль вершины стека, ад­ресует указатель стека SP. Таким образом, стек работает по принципу LIFO (last in, first out — последний приходит, первый уходит).


            5.5. Ассемблирование вручную

            Ассемблирование — это процедура перевода программы на языке ас­семблера в программу на машинном языке. Обычно это осуществляется специ­альной ассемблерной программой, но если она отсутствует, приходится состав­лять программу на машинном языке вручную. При этом целесообразно вначале написать программу на ассемблере, а затем перевести ее в машинные коды, так как прямое написание программы в машинных кодах обладает рядом недостат­ков. В частности, ассемблирование вручную снижает количество ошибок.

            При этом следует несколько расширить стандартный бланк ассемблера, добавив поле абсолютных 16-ричных адресов и поле машинного кода:

Адрес

Машинный код

Метка

Код

Операнд

Комментарий

            Пример (фрагмент примера курсового проекта):

Ад­рес

Машин­ный код

Мет-ка

Код

Операнд

Комментарий

ORG

0000H

0000

31 00 84

M0:

LXI

SP, 8400H

0003

21 0A 80

LXI

H, 800AH

0006

AF

M1:

XRA

A

0007

77

MOV

M, A

0008

3E 01

MVI

A, 01H

000A

2D

DCR

L

            При ассемблировании вручную нужно учитывать, что каждая строка ас­семблера (кроме строк с директивами) соответствует одной машинной команде. Машинные команды могут иметь длину 1…3 байта (см. табл. 5), что необхо­димо учитывать при заполнении 16-ричными кодами столбца «машинный код», а затем «адрес».

            Когда в строке имеется мнемоника команды, в столбец «машинный код» заносится значение, найденное по таблице кодов операций МП (см. табл. 6).

            Если в поле операнда команды имеется числовой непосредственный опе­ранд, в столбец «машинный код» заносится его 16-ричный эквивалент.

            Первым записывается код операции, а если команда содержит больше 1 байта, сначала записывается младший байт операнда, а затем — старший.


            5.6. Подпрограммы