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

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

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

В общем виде процесс доступа к данным при косвенной адресации состоит из следующих шагов:

- выбора из команды номера регистра;

- выбора из регистра значения адреса операнда;

- обращения к операнду по указанному адресу;

- выполнения операции.

Индексная адресация. Машинное слово, соответствующее команде с индексной адресацией операндов, содержит следующие элементы, используемые для нахождения адреса операнда: базовый адрес и смещение. Базовый адрес, содержащийся в самой команде, задается nyTeii указания его абсолютного значения. Смещение (индекс) является некоторым числовым значением, размещаемым в регистре микропроцессора. Этот регистр называется индексным. Исполнительный адрес формируется путем сложения содержимого ячейки, в котором указан адрес с базовым адресом и величиной смещения, т.е. абсолютное значение адреса, содержащееся в самой команде, складывается с содержимым индексного регистра.

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

Базовая адресация. Этот способ является фактически обратным индексному. Если при индексном способе в команде содержится неизменный базовый адрес, а в индексном регистре переменное значение, то при базовом способе в регистре содержится неизменное значение, а в команде указывается абсолютное значение смещения.

Базовая адресация с индексированием. Данный спо-



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

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

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

Относительная адресация. Данный способ адресации основывается на использовании текущего значения счетчика команд, по сути являющегося адресом, по которому команда размещается в памяти. Заметим, что размещение программы в памяти аналогично размещению данных и возможность цифровой обработки команд программы в памяти аналогична обработке обычных данных. При относительной адресации одним из компонентов вычисления исполнительного адреса является счетчик команд. Вторым компонентом является величина смещения, которая позволяет адресовать данные, находящиеся в «окрестности» команды.

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



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

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

Способы адресации имеют как специфические, т и общие признаки. Выбор того или иного способа о( ществляется программистом и зависит от его опыта, знаний, поставленных целей, а порой и от привычки.

5.3. Программирование МПС

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

Рассмотрим типы команд, характерные для больщи:!-ства программ, написанных на различных языках программирования (алгоритмических языках). К числу основных типов команд (операторов) относятся: арифметические, логические, пересылки данных, условного и безусловного перехода, связи с подпрограммами, упрг ление вводом - выводом.

Арифметические команды служат для записи дей вий над числами по правилам арифметики, если таь действия необходимы в алгоритме решения задачи. ( новными операциями, реализуемыми командами даннс




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

0.026