Главная  Микропроцессорные системы 

[0] [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]

памяти, адресуемой индексным регистром гг, т. е. первое слово передаваемого массива. Затем состояние регистра Г2 увеличивается на единицу, чтобы в следующем цикле передать в аккумулятор очередной элемент массива, после чего содержимое аккумулятора пересылается в ячейку Лкоп, адресуемую через состояние регистра Гь Последним блоком программы является продвижение по счетчику и выбор направления. Рассмотренная подпрограмма имеет типичную структуру циклической программы. Полная программа копирования блока данных приведена в табл. 2.24.

Таблица 2.24

Ячейка

Содержимое

При.мечание

lxi D, ак lxi h, au lxi b, n call copy

i Непосредственная загрузка адресов Лкон> j Лисх и Л в регистровые пары D, н я В

Вызов подпрограммы

€opy

mov a, h

inxh ldax d

inxd dcrb jnz copy ret

(а) «- [Лисх]. Загрузка в а первого элемента исходного массива (н) (l) (Я) (l) -Ь 1 КЛон)) *-[(Лсх)]- Загрузка первого элемента исходного массива в ячейку с адресом Лон (D) (е) (d) (е) + 1

Продвижение по счетчику Проверка условий Возврат в основную программу

au au + 1

Данные

Массив данных, подлежащий пересылке

au +

ак ak+ 1

Участок памяти, в который необходимо переелатьмассив

ak + n-i



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

(А) [Аиа-Цп]]

Проталкиванае в стэк


Конец

Загрузка указатепя стэка

Загрузка индексного регистра (с чеглчика)

Загрузка аккумулятора с использованием индексной

адресации

Установка счетчика и ВыЗор направления

Рис. 2.27. Схема программы пересылки данных с использованием стэка

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



Этот адрес образуется как сумма адресного поля команды (числа Лпсх-1) и содержимого индексного регистра (на первом шаге числа Л). После проталкивания в стэк указатель счетчика уменьшается на единицу и затем выполняются обычные операции циклической программы. Последним элементом массива, проталкиваемым в стэк, будет элемент с адресом Лисх.

Таблица 2.25

Ячейка

Содержимое

Примечание

LOOP

AU AU +\

AU + N- 1

АК AK+\

AK + N-\

LXI SPAK+N-\ LXI B, N LXIH, AU-l

DAD В

MOV A, H PUSH PSW

INXSP

DCXH

DCX В

JNZLOOP HLT

Да иные

Загрузка указателя стэка (В) (С) <- Л, установка счетчика (Н) {L) AU - 1, установка исходного адреса при индексировании (Я) (L) *- (Н) (L) -Ь (В) (С) - модификация адреса {А) *- т (L)] Проталкивание в стэк

{В) (С) (В) (С) -1 - уменьшение состояния счетчика Выбор направ.тения Останов

Массив данных, подлежащий пересылке

Участок памяти, в который надо переслать массив

Соответствующая программа в командах микропроцессорного комплекта серии К580 приведена в табл. 2.25,

При написании этой программы использована команда непосредственной загрузки указателя стэка LXI SP,. по которой в указатель стэка записывается содержимое адресного поля командного слова, в нашем случае адрес



[0] [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]

0.001