КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
СПОСОБЫ ПОИСКА ОПЕРАНДОВ В ОПЕРАТИВНОЙ ПАМЯТИ ЭВМВспомним, что в коде команды содержится информация о данных, над которым нужно совершить некоторую операцию. Эти данные называют операндами. Обычно операнды содержатся в оперативной или регистровой памяти ЭВМ. Способ поиска операндов в памяти также определяет формат команды. Существуют 2 различных принципа поисков операндов в памяти: ассоциативный и адресный: - Ассоциативный поиск (поиск по содержанию запоминающей ячейки) предполагает просмотр содержимого всех ячеек памяти для выявления кода, содержащего заданный командой ассоциативный признак. - Адресный поиск предполагает, что операнд находится по адресу, указанному в адресном поле команд. Различают исполнительный адрес операнда и адресный код команды. Исполнительным адресом операнда называется двоичный код номера ячейки памяти, по которому будет записан или считан операнд. Адресным кодом команды называется двоичный код в адресном поле команды, с помощью которого необходимо сформировать исполнительный адрес операнда. В ЭВМ адресный код и исполнительный адрес не совпадают, поэтому способ адресации можно определить, как способ формирования исполнительного адреса по адресному коду команды. Эти понятия в дальнейшем будем использовать в описании способов адресации к операндам. Способы адресации к операндам в зависимости от типа поиска операндов в памяти классифицируют: 1) по наличию адресной информации в команде на: - явную адресацию. При таком способев коде команде есть поле адреса этого операнда; - неявнуюадресацию. При таком способе адресное поле в команде отсутствует, а адрес операнда подразумевается кодом операции. Например, из команды может быть исключен адрес приемника адресата, при этом подразумевается, что результат записывается на месте второго операнда. 2) по кратности обращения в оперативную память: - непосредственную адресацию (direct addressing). При непосредственной адресации операнд располагается непосредственно в адресном поле команды (рисунок 6). Рисунок 6 - прямую адресацию (immediate addressing). При прямой адресации обращение за операндом производится по адресному коду в поле команды. При этом исполнительный адрес совпадает с адресом кода команды. Это можно проиллюстрировать следующим рисунком (рисунок 7). Рисунок 7 - косвенную адресацию (indirect addressing). При косвенной адресации код команды указывает адрес ячейки памяти, в которой находится не сам операнд, а его адрес, называемый указателем. Это можно проиллюстрировать следующим рисунком (рисунок 8).
Рисунок 7 3) по способу формирования адресов ячеек памяти: - Абсолютная адресация предполагают, что двоичный код адреса ячейки памяти может быть целиком извлечен либо из адресного поля команды, либо из какой-нибудь другой ячейки в случае косвенной адресации. - Относительная адресация предполагают, что двоичный код операнда образуется из нескольких составляющих: - Б - код базы; - И - код индекса; - С - код смещения. Эти составляющие используются в различных сочетаниях. Виды относительной адресации: 1) Индексная адресация (рисунок 9). Рисунок 9 Для формирования адреса операнда используется регистровая память. Адрес i -операнда в массиве определяется как сумма начального адреса массива операнда, задаваемого смещением S, и индекса i , записанного в одном из регистров регистровой памяти, называемым индексным регистром. Адрес индексного регистра задается в команде полем адреса индекса Аи. В каждом i-том цикле содержимое индексного регистра изменяется на постоянную величину, как правило, это 1. Для работы программ с массивами, требующими однотипных операций над элементами массива, удобно использовать такой тип адресации 2) Автоиндексная адресация. При автоиндексации косвенный адрес, находящийся в регистре РП, автоматически увеличивается (автоинкрементная адресация), или уменьшается (автодекрементная адресация) на постоянную величину до или после выполнения операции. 3) Стековая адресация. Стековая память широко используется в современных ЭВМ. Хотя адрес обращения в стек отсутствует в команде, он формируется схемой управления (рисунок 9): Рисунок 9 Для чтения записи доступен только один регистр - вершина стека. Этот способ адресации используется, в частности, системой прерывания программ при вызовах подпрограмм. Стековая память реализуется на основе обычной памяти с использованием указателя стека и автоиндексной адресации. Логически ячейки памяти, отводимые под стек, организованы так, чтобы считывание последнего записанного адреса производилось первым, а первого записанного адреса производилось последним. Такая логическая организация формируется специальным счётчиком. Этот счётчик называется указателем стека SP – это регистр микропроцессора. Ячейка памяти, в которую в данный момент может быть записан, например адрес возврата из подпрограммы, называется вершиной стека. Количество ячеек памяти, предназначенных для организации стека, называется глубиной стека. Последняя ячейка памяти, в которую можно производить запись называется дном стека. Запись в стек производится с использованием автодекрементной адресации, а чтение - с использованием автоинкрементной адресации (рисунок 10). Рисунок 10 Пример. Вызов подпрограммы, написанной на языке С. В языке С подпрограммы называются функциями. Функция может иметь аргументы и локальные переменные, т. е. переменные, существующие только в процессе выполнения функции. Предположим, функция зависит от двух входных аргументов х и у целого типа и использует три локальные переменные а, b и с также целого типа. Функция возвращает целое значение. Подпрограмма: Основная программа: Например, в определённом месте программы вызывается функция f с аргументами х = 2, у = 3. Вызывающая программа помещает фактические значения аргументов х и у функции f в стек, при этом наверху стека лежит первый аргумент функции, под ним — второй аргумент. При выполнении инструкции вызова функции вверх стека помещается также адрес возврата. В начале работы функции f стек имеет следующий вид: Перед выполнением функция f должна захватить в стеке область памяти под свои локальные переменные а, b, с.
|