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

[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.16 ными данными. Использование циклических программ позволяет в этом случае отказаться от написания периодически повторяющихся участков общей программы и тем самым существенным образом сократить объем, занимаемый этой программой в ПЗУ.

Пусть, например, требуется сложить 30 чисел, хранящихся в последовательно расположенных ячейках от /(-й до /(-f-lD (здесь и далее при записи цифровой информации мы будем использовать шестнадцатеричную систему счисления как наиболее распространенную для программирования микро-ЭВМ)- Програм.ма, реализующая эту операцию путем многократного использования команды сложения ADD, приведена в табл. 2.16. Данная программа, как видно ш табл. 2.16, весьма неэкономична, так как занимает много места в памяти, а при значительном увеличении количества складываемых чисел становится невыполнимой.

Эту задачу можно решать более изящно путем использования циклических программ. Схема циклической программы для рассматриваемого примера приведена на рис. 2.21, а сама программа записана в табл. 2.17.

В данной программе имеются четыре блока (см. рис. 2.21), присущие любой циклической программе: восстановление параметров цикла, рабочая часть цикла, продвижение по массиву данных, проверка условия и выбор направления.

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

Ячейка

Содержимое

ALPHA

LDAK

ADD К + 1

ADD К+ 2

ADDK+ID

STA RES

K+ID



Начало

Начальная установка счетчика. Начальная установка указателя массива

Сложить числа

Изменить укаяа -тель массива

<чет чик)=оТ2>

Восстановление параметров цикла.

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

Продвижение по массиву данных

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

Записать результат

Конец

Рис. 2.21. Схема циклической программы сложения N чисел

В рабочей части цикла выполняются основные операции (в нашем случае операция сложения). Эти операции повторяются столько раз, сколько задает счетчик числа циклов (ячейка COUNT).

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

Далее производится уменьшение состояния счетчика циклов на единицу и осуществляется проверка условий. Если число циклов, заложенных в счетчике, оказалось не выполненным, то программа продолжается, в противном случае вычисления прекращаются. Рассмотрим некоторые особенности циклической программы, представленной в табл. 2.17.

Подготовка параметров цикла реализуется командами загрузки содержимого ячейки COUNT в регистр В ЦП и пересылки адреса первого элемента в регистр HL ЦП. Регистр HL используется для косвенной адресации элементов массива, т. е. его содержимое является номером ячейки, в которой хранится текущий элемент мас-



Таблица 2.17

Ячейка

Содержимое

Примечание

LDACOUNT

1 Пересылка числа повто-

MOVB, A

/ рений в регистр В ЦП

Восстановление парамет-

LHLD ADRSK

Загрузка адреса первого

элемента массива в ре-

ров цикла

гистр HL ЦП

LOOP

MVI A, L

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

MOVD,K

Загрузка регистра D пер-

вым элементодм массива,

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

косвенно адресуемым через регистр HL

ADDD

М) = 0 + £1,

(Л) = £1 +F2 . . .

INXH

(HL) *- {HL) -\- 1 Продвижение по массиву данных

DCR В

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

JNZLOOP

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

STA RES

Загрузка ячейки RES результирующей

суммой

Останов

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

COUNT

= (30)io - число повторений циклической программы

Константа

ADRSK

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

ячейки первого элемента

суммируемо-

го массива

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

(данные

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



[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