![]() |
Главная Микропроцессорные системы [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), присущие любой циклической программе: восстановление параметров цикла, рабочая часть цикла, продвижение по массиву данных, проверка условия и выбор направления. Восстановление параметров цикла - это часть программы, предшествующая циклу, в процессе которой происходит установление параметров, изменяющихся в ходе цикла. В нашем случае производится ввод в программу числа циклов (количества суммируемых чисел) и запись адреса первого элемента массива.
Начало
Восстановление параметров цикла. Рабочая часть цикла Продвижение по массиву данных Проверка условий и выйор направления Записать результат Конец Рис. 2.21. Схема циклической программы сложения N чисел В рабочей части цикла выполняются основные операции (в нашем случае операция сложения). Эти операции повторяются столько раз, сколько задает счетчик числа циклов (ячейка COUNT). После выполнения рабочей части цикла необходимо изменить номер элемента.массива с тем, чтобы при следующем проходе цикла работать с нужным элементом. Далее производится уменьшение состояния счетчика циклов на единицу и осуществляется проверка условий. Если число циклов, заложенных в счетчике, оказалось не выполненным, то программа продолжается, в противном случае вычисления прекращаются. Рассмотрим некоторые особенности циклической программы, представленной в табл. 2.17. Подготовка параметров цикла реализуется командами загрузки содержимого ячейки COUNT в регистр В ЦП и пересылки адреса первого элемента в регистр HL ЦП. Регистр HL используется для косвенной адресации элементов массива, т. е. его содержимое является номером ячейки, в которой хранится текущий элемент мас-
сива. Поэтому продвижение по массиву данных легко реализовать, давая приращения содержимому этого регистра на единицу с помощью команды 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.0007 |