Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
стр 103-113.doc
Скачиваний:
11
Добавлен:
21.11.2019
Размер:
3.61 Mб
Скачать

Косвенная адресация

При прямой адресации (линейной) каждый адрес (его еще называют исполнительным адресом) соответствует определенной физической ячейке данных и является ее номером.. Другими словами, обращение за операндом в ОП производится по адресному коду в поле команды, т.е. исполнительный адрес операнда (номер ячейки) совпадает с адресным кодом команды (код адресного поля команды). При этом адресное пространство памяти ограничено адресным полем команды, что существенно ограничивает общий объем оперативной памяти. Встречаются приложения, когда в команде целесообразнее размещать не сам адрес операнда (результата или перехода), а его указатель, т.е. адрес ячейки ОП в которой сохраняется адрес операнда. Идея метода состоит в том, что адрес памяти (номер ячейки) предварительно заносится в один из регистров процессора или в ячейку памяти. При этом команда (адресное поле команды) содержит лишь ссылку на этот регистр или ячейку памяти.

Адресация к операнду через цепочку указателей (косвенных адресов) называется косвенной. Такое косвенное адресование упрощает построение циклических программ, а также создает условия для расширения адресного пространства памяти. Рассмотрим пример такой адресации при использовании 11 разрядной шины адреса и 16 разрядной шины данных:

К оманда: ADD (25)

Ф ормат команды: 0100 1 000 0001 1001 адрес

КОП бит косвенной адресации

поле адреса поле данных

Ш

  1. 53

53 407

аг 1.

И з ячейки памяти по адресу 25

и звлекается адрес операнда 53.

Ш аг 2.

И з ячейки памяти с адресом 53

и звлекается значение операнда 407.

Ш аг 3.

Операнд 407 суммируется с

содержимым аккумулятора.

Таким образом, мы получили возможность производить адресацию к 216 ячеек, а не к 211 как это было в первоначальном варианте.

Типы адресов

Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса (рисунок 7.4). Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Так, как во время трансляции в общем случае не известно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адреса, присущей данной архитектуре компьютера, и, как правило, не совпадает с объемом физической памяти, имеющимся в компьютере.

Р ис. 7.4 Типы адресов

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]