Снос зданий:
ecosnos.ru
Главная  Микроустройства: номенклатура изделий электронной промышленности 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 [ 68 ] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

Пример.

Метка Код Операнд ARRAY: DS . 64

Комментарий РЕЗЕРВИРОВАНИЕ В ПАМЯТИ 64 БАЙТОВ

Программирование на языке ассемблер микропроцессора К580ИК80. Структура данных. Под структурами данных понимают наборы определенным образом организованных данных. Прбграм-мисту необходимо знать наиболее распространенные структуры данных, представление их в памяти и способы их эффективного использования в прикладных программах.

Массивы. Наиболее простой и распространенной структурой данных является одномерный массив. Он представляет собой набор элементов данных одинаковой длины, который размещается в области смежных ячеек памяти. Положение любого элемента в массиве характеризуется его порядковым номером, называемым индексом или смещением. Первый элемент массива определяется базовым (ва-чальным) адресом. В микропроцессоре К580И4(80 для операций с массивами удобно применять косвенную адресацию, где функцию указателя выполняют регистры (Н, L).

Пример:

В программе вычисляется сумма 16-битовых элементов массива, представляющих целые без знака. Длина массива хранится в ячейке с адресом LENGT, а в качестве счетчика используется регистр В.

Метка

Код

Операнд'

Комментарий

LENGT

; УСТАНОВКА СЧЕТЧИКА

B, A

D, 0

; НАЧАЛЬНОЕ ЗНАЧЕНИЕ

; СУММЫ = 0

H, BASE

; УСТАНОВКА УКАЗАТЕЛЯ

A, M

; СУММИРОВАНИЕ

; МЛАДШЕГО

E. A

; БАЙТА

УСТАНОВКА УКАЗАТЕЛЯ

НА СТАРШИЙ БАЙТ

A, M ;

СУММИРОВАНИЕ

D ;

СТАРШЕГО БАЙТА

D, A ;

(С УЧЕТОМ ПЕРЕНОСА)

H ;

УКАЗАТЕЛЬ НА СЛЕДУЮЩИЙ

ЭЛЕМЕНТ

В ;

ПРОВЕРКА

ADDW ;

ОКОНЧАНИЯ ЦИКЛА

Сумма накапливается в регистрах (D, Е). Флажок переноса из младщих байт учитывается при сложении старших байт с помощью команды ADG. Команды INX и MOV не изменяют значение бита переноса.

Иногда указатель и счетчик приходится хранить не в регистрах, а в ячейках памяти, например, РР и CNTR. В этом случае обращения к элементу и модификая указателя выполняются следующей



последовательностью'команд: LHLD РР; MOV А, М; INX Н; SHLD PP. Уменьшение значения счетчика осуществляется через аккумулятор: LDA CNTR; DCR А; STA CNTR.

Стек. Стек представляет собой разновидность сгдиомерного массива. Загрузка данных в стек и извлечение из стека осуществляется только с одного конца, называемого верхушкой (верхом) стека. В микропроцессоре имеется аппаратный указатель стека, и все команды, связанные с засылкой данных в стек и извлечением из стека, сопровождаются автоматической модификацией указателя стека SP. До использования стека необходимо командой LXISP загрузить указатель SP максимальным адресом памяти, выделенной для стека, например: LXI SP, STACK, где STACK - метка, определяющая в программе максимальный адрес области.

Доступ к SP производится через регистры (Н, L). Если требуется запомнить содержимое SP в двух ячейках памяти, адрес первой, из которых ADRl, должна быть выполнена следующая последовательность команд: LXI Н, 0; DAD SP; SHLD ADRl. Загрузка SP из указанных ячеек осуществляется двумя командами LHLD ADRl; SPHL.

Пример:

Метка PUSH1;

Код LHLD

Операнд STACK

MOV SHLD

Н

М, А STACK

РОР1: LHLD STACK

SHLD

A, M H

STACK

Комментарий ЗАГРУЗКА УКАЗАТЕЛЯ СТЕКА В (Н, L)

УМЕНЬШЕНИЕ ЗНАЧЕНИЯ УКАЗАТЕЛЯ СТЕКА.НА 1 ЗАГРУЗКА В СТЕК ЗАПОМИНАНИЕ ЗНАЧЕНИЯ УКАЗАТЕЛЯ СТЕКА ЗАГРУЗКА УКАЗАТЕЛЯ СТЕКА В (Н, L) ИЗВЛЕЧЕНИЕ ИЗ СТЕКА УВЕЛИЧЕНИЕ ЗНАЧЕНИЯ УКАЗАТЕЛЯ НА 1 ЗАПОМИНАНИЕ ЗНАЧЕНИЯ УКАЗАТЕЛЯ СТЕКА В примере приведены две программы: для записи в стек из аккумулятора (PUSH1) и извлечения из стека в аккумулятор (Р0Р1). Адрес верхушки стека хранится в двух ячейках памяти, помеченных меткой STACK.

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

В таблицах адресов элементами являются 16-битовые адреса ячеек памяти. Для ручного управления микропроцессорной системой обычно применяется функциональная клавиатура. В зависимости от типа клавиатуры код каждой клавиши представляется значением, занимающим от 4 до 7 бит. При нажатии функциональной клавиши система должна выполнить нек'оторую программу, определяе--мую назначением клавиши. Применение таблицы адресов позволяет ускорить процесс поиска требуемой программы и сократить объем программы поиска,



Пример: Метка

Код

Операнд

Комментарий

IN

; ЗАПИСЬ КОДА КЛАВИШИ

; В АККУМУЛЯТОР

УДВОЕНИЕ КОДА ,

E, A

ФОРМИРОВАНИЕ ИНДЕКСА В

D, 0

РЕГИСТРАХ (D, Е)

H, TSTAD

ЗАГРУЗКА НАЧАЛЬНОГО АДРЕСА

ТАБЛИЦЫ РЕГИСТРЫ (Н, L)

D ;

ИНДЕКСИРОВАНИЕ

E, M ;

СЧИТЫВАНИЕ В РЕГИСТРЫ

H ;

(D, Е) НАЧАЛЬНОГО АДРЕСА

D, M ;

ПРОГРАММЫ

XCHG

АДРЕС ПЕРЕХОДА В РЕГИСТРАХ

(Н, L)

PCHL

; ПЕРЕХОД К ФУНКЦИОНАЛЬНОЙ

; ПРОГРАММЕ

В приведенной программе начальный адрес таблицы обозначен именем TSTAD. Коды клавиш вводятся командой IN через порт KBD. В программе коды удваиваются, так как элементы таблицы адресов занимают по две смежные ячейки памяти.

Организация подпрограмм. Подпрограмма представляет собой некоторый модуль (сегмент) программы, который может вызываться на исполнение любое число раз. Инициирование выполнения подпрограммы осуществляется путем указания ее имени в трехбайтовой команде вызова CALL. Имя подпрограммы должно находиться в поле метки первой ее команды. При выполнеиии команды CALL текущее содержимое PC (адрес возврата) загружается в стек, а в PC загружается адрес перехода - второй и третий байты команды CALL. После этого начинает выполняться первая команда подпрограммы, затем вторая и т. д. Заключительной командой каждой подпрограммы должна быть однобайтовая команда возврата RET, которая извлекает адрес возврата из стека и передает его в PC. Далее будет выполняться команда, расположенная в вызывающей программе сразу после команды CALL.

Правильно составленная подпрограмма не должна изменять содержимое ни одного регистра, которое^ после выполнения подпрограммы потребуется вызывающей программе. Содержимое регистров, используемых подпрограммой, необходимо временно запоминать, чтобы по завершении подпрограммы его можно было восстановить без изменений. Обычно для запоминания содержимого регистров исйользуется стек. Из-за специфики стека содержимое регистров восстанавливается в обратном порядке.

Пример:

Метка SUBR:

Код PUSH PUSH PUSH

Операнд PSW В D

Комментарий ЗАПОМИНАНИЕ СОДЕРЖИМОГО РЕГИСТРОВ В СТЕКЕ КОМАНДЫ ПОДПРОГРАММЫ



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 [ 68 ] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95