Допустимыми значениями R1 будут B, D, H, PSW. В случае обращения STACK SP будет получено сообщение об ошибке.
5.4. Организация массивов, очередей и стеков
1. Массивы. Одномерный массив представляет собой набор элементов данных одинаковой длины, который размещается в смежных ячейках области памяти с начальным (базовым) адресом BASE. Число элементов в массиве называется его длиной. Положение любого элемента в массиве характеризуется его порядковым номером, называемым индексом или смещением. Адрес элемента равен сумме базового адреса BASE и индекса IND, умноженного на длину элемента в байтах. На практике целесообразно применять массивы, длина элементов которых равна степени двух. Тогда при вычислении адреса элемента операция умножения заменяется сдвигами. В наиболее простых массивах длина элементов составляет 1 байт.
Формирование и обработка массивов осуществляются циклическими программами, состоящими из трех частей: инициализации, обращения к текущему элементу, перехода к следующему элементу и проверки условия окончания цикла.
Рис.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. Подпрограммы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.