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

[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

Ячейка

Содержимое

Примечание

DUBPREC

LDA XL

(A) (XL)

ADD YL

(A) = XL + YL

Хранение младших разрядов pe-

STA RESL

ADC XH

рультата

Сложение с учетом единицы пере-

носа, хранящейся в РП

ADD YH

STA RESH

Младшие разряды X

Старшие разряды X

.Младшие разряды Y

Старшие разряды Y

RESL

Младшие разряды результата

RESH

Старшие разряды результата

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

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

Программирование операций пересылки данных в пределах основной памяти. При решении ряда задач, связанных с обработкой массивов данных, часто возникает необходимость пересылки части массива из одного уча-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.0009