![]() |
Главная Микропроцессорные системы [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
На рис. 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 |