![]() |
Главная Микропроцессорные системы [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.24. Состояния счетчика команд и стэка при выполнении команды обращения к подпрограмме на 3 В виде закрытой подпрограммы. Тогда рассматриваемый фрагмент программы будет иметь вид, приведенный в табл. 2.22. Состояния счетчика команд и стэка при выполнении программы, записанной в табл. 2.22, показаны на рис. 2.24. В заключение упомянем, что при использовании стэка обращение к подпрограмме обеспечивает автоматическую работу и с вложенными подпрограммами, т. е. с подпрограммами под- $чеика К OcHoina память ут/тггтттгутГг Младшие разряды Старшие разряды ZZZZZ7ZZZZ7ZZ2. Уисла „ с двойной Рис. 2.25. Представление чисел с двойной точностью в памяти микро-ЭВМ программ. При этом в стэке происходит запо-, минание адресов возвра- точноотьш 3 дд5, каждого уровня обращения к подпрограмме. Арифметические и логические операций программируются с использованием обширного списка команд, входящих в состав языка ассемблера современных микро-ЭВМ. Простейшие операции, такие как операции сложения или вычитания, выполняются с помощью соответствующих команд непосредственно, другие, как, например, операции умножения или деления, требуется программировать. Обычно стандартные подпрограммы умножения и деления входят в состав математического обеспечения, поставляемого изготовителями микропроцессорных комплектов. В некоторых случаях для ускорения выполнения этих операций могут использоваться аппаратные средства - умножители и делители требуемой разрядности, выполненные в виде специализированных БИС. Там, где это возмол<но, следует использовать операции умножения и деления на степень числа 2, ко- торые выполняются путем сдвига операнда на требуемое число разрядов влево или вправо. Часто в процессе вычислений требуется получить результат с точностью, превышающей ту, которая обеспечивается используемой разрядностью аккумулятора. В этом случае можно производить арифметические операции с большей, например двойной, точностью. Для хранения чисел с двойной точностью требуется объем памяти, в два раза больший. На рис. 2.25 показан участок основной памяти, в которой числа хранятся с двойной точностью, а в табл. 2.23 приведен пример программы сложения двух чисел X и Y с двойной точностью. Таблица 2.23
Особенность этой программы заключается в том, что операция сложения выполняется сначала над младшими разрядами слагаемых, а затем - над старшими с учетом возможности переноса, возникающего при первом суммировании. В некоторых микро-ЭВМ предусмотрены специальные команды, выполняющие операции над числами двойной разрядности. Программирование операций пересылки данных в пределах основной памяти. При решении ряда задач, связанных с обработкой массивов данных, часто возникает необходимость пересылки части массива из одного уча-5* 67 стка памяти в другой (задача копирования блока данных). При программировании этой задачи необходимо обеспечить: а) формирование начального адреса исходного массива Лисх; б) формирование начального адреса конечного массива Лкон; в) подсчет числа передаваемых слов Л. Для осуществления операций копирования можно использовать три способа: программный, с использованием индексных регистров, с применением стэка. Программный способ требует много времени, так как для организации пересылки каждый элемент массива (гг)- (rj)- Wepexadк под-j программе Загрузка rj Загрузка Загрузка гу [счетчика) CALL Подпрограмма Чтение norz ![]() Воз So am В основную npoipoMMy Рис. 2.26. Схема программы пересылки данных с использованием индексных регистров адресуется индивидуально с использованием, как правило, косвенной адресации. Поэтому здесь он не рассматривается. Схема программы пересылки данных с использованием индексных регистров приведена на рис. 2.26. В индексные регистры г\ и гч записываются начальные адреса конечного и исходного массивов, а в регистр гз- объем передаваемого массива Л, после чего происходит обращение к подпрограмме, которая, собственно, и осуществляет операцию копирования данных. Прежде всего в аккумулятор загружается число, хранящееся в ячейке [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 |