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

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

косвенная адресация, то рабочая часть цикла - операция сложения - реализуется с помощью двух команд. Первая - MOV D,K - пересылает содержимое ячейки/(, адрес которой определяется числом, хранящимся в регистре HL, в регистр ЦП, после чего с помощью команды ADD D содержимое этого регистра прибавляется к содержимому аккумулятора.

Следует отметить, что программа, записанная в табл. 2.17, не является единственно возможной даже при фиксированном наборе команд. В рассмотренном примере использовалась косвенная адресация (через регистр HL), при которой этот регистр играл роль ячейки-указателя для выборки элементов массива. Продвижение по массиву данных осуществляется путем прибавления приращения к этому указателю.

Другим методом продвижения по массиву данных является модификация адреса. Адресное поле выполняемой команды (в нашем случае команды сложения) изменяется после каждого прохождения программой цикла. Это изменение можно обеспечить путем введения нужного приращения адреса в адресное поле содержимого ячейки, в которой хранится модифицируемая команда. Составим программу для того же примера, используя для продвижения по циклу способ модификации адреса. Эта программа приведена в табл. 2.18. Рассмотрим некоторые ее особенности. В ячейке LOOP хранится модифицируемая команда

ADD К

(КОП) (адресная часть).

По команде INR LOOP содержимое ячейки LOOP увеличивается на единицу. Таким образом, после исполнения команды ШР в этой ячейке будет храниться число

ADD K+l

(КОП) (адресная часть),

и, следовательно, при очередном проходе цикла к содержимому аккумулятора будет прибавлен элемент массива с номером /C+l. Команда LXIH LOOP (команда с непосредственной адресацией) носит вспомогательный характер. Она обеспечивает загрузку регистра HL номером ячейки, в которой хранится модифицируемая



аблица 2.18

Ячейка

Содержимое

Примечание

LDA COUNT

\ Загрузка счетчика циклов (регист-

MOV В, Л

/ pa, В)

LXIH LOOP

Загрузка номера ячейки LOOP в ре-

гистр HL

MVI A, L

Обнуление аккумулятора

LOOP

ADD К

Рабочая часть цикла

INRLOOP

Увеличение содержимого ячейка

LOOP, адресуемой через регистр HL,

на 1 : {LOOP] = [LOOP) + 1

DCR В

{В) <- (В) - 1. Уменьшение счетчика

циклов

JNZLOOP

Проверка условия и выбор направле-

STA RES

(RES) {А)

Останов

Ячейка результата

COUNT

Число повторений цикла

Константа

Ячейки массива, в которых хранятся

F2 *

данные

команда ADD К- Последнее необходимо в связи с тем, что команда INF LOOP является командой с регистровой косвенной адресацией. Следовательно, она работает с той ячейкой памяти, номер которой хранится в регистре HL.

Другим очень важным и весьма распространенным способом продвижения по массиву данных в циклических программах является индексирование адресов, основанное на использовании индексных регистров и индексного способа адресации. В качестве индексных регистров можно использовать и регистры общего назначения ЦП.

В различных микро-ЗВМ индексирование адресов осуществляется по-разному. В общем случае прн прямой адресации индексируемая команда может быть записана как

коих iJr).

Исполнительный адрес при этом равен сумме X (адреса, указанного в команде) и содержимого регистра г,



«спользуемого в канестве индексного регистра {Jr). Однако адресация и индексирование в ряде микро-ЭВМ может быть и косвенной, при этом она задается командами вида

КОП аX (/г),

в соответствии с которыми исполнительный адрес М ра* вен содержимому ячейки, адрес которой равен X-}-{Jr), т. е.

(М) = (Х+(/г)).

В последнем случае для организации индексирования в некоторых микро-ЭВМ удобно использовать команды •операций с двойной точностью типа DAD. Так, например, команда DAD D означает, что к содержимому двух регистров ЦП Я и L, включенных последовательно, прибавляется содержимое двух других регистров - D и Е, также включенных последовательно, при этом результат сложения остается в регистрах HL:

(Я) (1)ч-(Я) (L)-f (D) (£).

Следовательно, регистровую пару DE можно использовать в качестве индексного регистра, содержимое которого изменяется с требуемым приращением с помощью команды INR D. При этом начальный адрес, относительно которого осуществляется индексирование, необходимо предварительно занести в регистр HL.

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

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



[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