ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ
Отчет
по лабораторной работе №2
по дисциплине
«Архитектура ЭВМ и микропроцессорных систем»
на тему:
«СПОСОБЫ АДРЕСАЦИИ КОМАНД И ДАННЫХ»
Студента: Марко Тангуила
фамилия, имя, отчество
кафедры Информационных систем
направления 09.03.02 Информационные системы и технологии
№ и полное наименование
Первый курса группа 07001509
Преподаватель: Шамраев Анатолий Анатольевич, доцент
фамилия, имя, отчество, должность
Белгород 2016
1 Цель работы
Изучение методов адресации команд и данных в компьютерах, принципов логической организации аппаратных средств процессора, обеспечивающих доступ к памяти.
- 2 Порядок выполнения работы
2.1 Изучить теоретическую часть работы, уяснив наиболее распространенные методы адресации данных в компьютерах. При этом необходимо обратить внимание на такие понятия, как подразумеваемый операнд и подразумеваемый адрес.
2.2 Затем следует перейти в раздел "Моделирование" и выполнить следующие процедуры:
выбрать размер данных – BYTE, размер сегмента – 128 байт;
базовый адрес сегмента рассчитать по формуле:
(N_вар + N_гр * 30) * 16;
эффективный адрес операнда:
ЭА = (N_вар + 1) * 9.
Значения базы, индекса, смещения: произвольные ненулевые, подбираются в соответствии с условиями, приведенными выше. Полученные значения вводятся в окнах Адрес сегмента, Размер сегмента, Смещение и т.д. Для всех девяти методов адресации данных в памяти необходимо построить таблицу.
Таблица 1 – Исходные данные к выполнению задания
| Вариант | Режимы адресации |
| 3 | Базовый | Базово-индексный с масштабированием | Базово-индексный со смещением |
3 Теоретическая часть
- 3.1 Непосредственная или литеральная адресация
При непосредственной или литеральной адресации в команде содержится не адрес операнда, а сам операнд. При выполнении такой команды не требуется обращения к памяти для выборки операнда. Непосредственная адресация используется при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры. Применение непосредственной адресации позволяет значительно уменьшить время выполнения программ, а также занимаемого ими объема памяти. Учитывая, что частота использования команд с непосредственной адресацией в различных программах колеблется от 17% до 43%, можно сделать вывод об эффективности такого метода адресации.
- 3.2 Прямая регистровая адресация
Применение прямой регистровой адресации предполагает, что исполнительный адрес совпадает с адресной частью команды. Этот способ адресации был общепринятым в машинах первых поколений и продолжает применяться в современных компьютерах в комбинации с другими способами.
- 3.3 Базовая адресация
Исполнительный адрес определяется суммой базового адреса Аб и смещения D. Для хранения базовых адресов в процессорах предусмотрены специальные регистры. Для хранения базового адреса используется регистр R1. Кроме того, в адресной части команды выделяется поле, в котором размещается смещение D. Исполнительный адрес формируется: Аи = Аб + D.

Рисунок 1 - Базовая адресация;
а) образование адреса элемента одномерного массива;
б) формирование исполнительного адреса
Применение в компьютерах базовой адресации позволяет при незначительной длине адресного кода команды обеспечить доступ к любой ячейке памяти. Количество разрядов регистра хранения базового адреса Аб выбирается таким, чтобы можно было задавать начало массива во всем адресном пространстве оперативной памяти, а адресный код смещения D определяет положение операнда относительно начала массива. Процесс формирования исполнительного адреса показан на рисунке 1.
Формирование исполнительного адреса при относительной адресации путем суммирования связано с потерей времени. Поэтому иногда применяется процедура получения исполнительного адреса, получившая название операции конкатенации (совмещения) слова:
РгАОП := [РгВ]\РгК[D],
где \ - символ операции конкатенации.
На рисунке 2 показана процедура получения исполнительного адреса на основе операции конкатенации.

Рисунок 2 - Формирование исполнительного адреса
методом конкатенации
Учитывая, что базовая адресация для различных программ составляет от 32% до 55%, можно сделать вывод о том, что применение операции совмещения позволяет повысить скорость формирования адреса одного из операндов и производительность процессора в целом.
Базовая адресация обеспечивает так называемую перемещаемость программ в памяти компьютера, т. е. размещение программ в свободных участках памяти без внесения изменений внутри самой программы.
- 3.4 Абсолютная адресация
При абсолютной адресации исполнительный адрес совпадает с адресной частью команды, т. е.
РгАОП := 1000; БРгОП := Ячейка ОП[1000].
Абсолютная адресация была общепринятой в первых вычислительных машинах и продолжает применяться в настоящее время в сочетании с другими методами.
- 3.5 Косвенная адресация
При косвенной адресации адресное поле команды указывает адрес ячейки памяти, в которой находится адрес операнда или команды. Таким образом, косвенная адресация может быть определена как "адресация адреса". Наличие косвенной адресации в команде может определяться кодом операции. Кроме того, в некоторых машинах в команде отводится специальный разряд (указатель адресации - УА) и цифра 0 или 1 в нем указывает, является адресная часть команды прямым адресом или косвенным. Процедуру обращения к оперативной памяти за операндом при косвенной адресации можно описать таким образом:
РгАОП := РгК[R1];
считывание: БРгОП := Ячейка ОП[РгАОП];
если УА = 0, то идти к А, иначе РгАОП: = [БРгОП];
считывание: БРгОП := Ячейка ОП[РгАОП];
А: РгАЛУ := [БРгОП].
В этом случае в регистр адреса оперативной памяти заносится содержимое поля R1 команды. Выполняется процедура считывания содержимого ячейки R1 и в буферном регистре ОП размещается один из операндов. Далее проверяется содержимое указателя адреса. Если УА равен 0 (прямая адресация), происходит переход к метке А, и в регистр АЛУ передается код операнда из буферного регистра оперативной памяти. Если же поле УА содержит 1 (косвенная адресация), то содержимое буферного регистра памяти загружается в адресный регистр памяти. Происходит повторное считывание из оперативной памяти (но из другой ячейки) операнда, который передается в регистр АЛУ.
- 3.6 Базово-индексная адресация
Является развитием метода базирования, с которым она часто используется совместно. Для выполнения индексации в машину вводятся специальные (индексные) регистры, в качестве которых используются ячейки сверхоперативной памяти. В формате команды выделяется поле Х для указания номера индексного регистра. Исполнительный адрес операнда при индексации формируется путем суммирования содержимого базового, индексного регистров и смещения D (рисунок 3).

Рисунок 3 - Формирование исполнительного адреса при индексации
- 3.7 Автоинкрементная и автодекрементная адресации
Автоинкрементная и автодекрементная адресации имеют механизм автоматического приращения или уменьшения содержимого определенного регистра при каждом обращении к нему. Такой тип адресации особенно эффективен при обработке массивов данных.
При автоинкрементной адресации сначала содержимое регистра используется как адрес операнда, а затем изменяется путем прибавления константы d, равной числу байт в элементе массива. При автодекрементной адресации сначала содержимое указанного в команде регистра уменьшается на число d, равное числу байт в элементе массива, а затем используется как адрес операнда.
Автоинкрементная и автодекрементная адресации представляют собой упрощенный вариант индексации и являются важным механизмом преобразования адресных частей команд при организации вычислительных циклов.
- 3.8 Стековая память
Безадресное задание операндов реализуется посредством стековой памяти, которая является эффективным элементом современной архитектуры компьютеров, начиная персональным компьютером и заканчивая мейнфреймом.
Стек представляет собой хранилище данных, работа с которым ведется по следующему принципу: элемент, записанный в стек последним, считывается из него первым. Применяются два вида реализации стековой памяти:
аппаратный стек, представляющий собой группу последовательно пронумерованных регистров; группа ячеек ОП, снабженных указателем стека.
Рассмотрим наиболее распространенную организацию стека, при которой он заполняется сверху вниз: первый элемент записывается в самый конец области стека (в ячейку с наибольшим адресом), следующий элемент записывается под ним и т. д. При чтении информации из стека первым извлекается последнее поступившее в него слово. Таким образом, получается, что низ стека всегда фиксирован (это последняя ячейка области стека), а вершина стека все время перемещается. Для задания текущего положения вершины стека используется регистр SP (Stack Pointer – указатель стека). В нем хранится адрес той ячейки, в которой находится элемент, записанный в стек последним. Область памяти, выделяемая под стек, называется сегментом стека. Начало сегмента стека указывается в сегментном регистре BP (Base Pointer). В указателе стека SP устанавливается смещение вершины стека, отсчитанное от начала сегмента стека. Поэтому абсолютный адрес вершины стека задается парой регистров BP и SP (рисунок 2.5).
В стеке автоматически реализуется правило "последний пришел – первый ушел", поэтому при операциях со стеком возможно безадресное задание операнда. Команда не содержит адреса ячейки стека, но должна содержать адрес ячейки памяти или регистра, откуда слово передается в стек или куда помещается из стека.
Вычисления с использованием стековой памяти основаны на так называемой бесскобочной записи арифметических выражений (иногда ее называют польской инверсионной записью - ПОЛИЗ). Пусть имеется некоторое выражение:
| (a + b)*(с + d):(e*(f - squ g)). | (1) |
Запись этого выражения в ПОЛИЗ выполняется следующим образом: будем выписывать в строку, слева направо, операнды в том порядке, как они встречаются в данном выражении. Каждый раз, когда окажется, что операнды, необходимые для выполнения какой-либо операции из данного арифметического выражения, все уже выписаны, запишем знак этой операции; если далее окажется, что уже есть все операнды для следующей операции, запишем ее знак, если нет – будем продолжать выписывать по порядку следующие операнды. Если операндом для некоторой операции является результат какой-нибудь из предыдущих операций, то данный операнд считается имеющимся, если написан знак этой предыдущей операции. Преобразуя по этому правилу приведенное выше выражение, получим:
| ab + cd + * efg squ - *. | (2) |
В полученной записи арифметического выражения порядок действий определен однозначно, хотя скобки в нем не используются. В стековой памяти последовательность символов в выражении ПОЛИЗ, например (2), может рассматриваться как программа вычисления исходного арифметического выражения (1). На рис. 4 приведена последовательность операндов и операций, записанных в стековую память, для вычисления выражения (1). При этом, в стек заносятся только адреса операндов, содержащиеся в ОП, и коды операций. Коды операций инициируют извлечение из стека одного или двух операндов, выполнение над ними указанной в команде операции и занесение результата в вершину стека.
| Адрес a |
| Адрес b |
| + |
| Адрес c |
| Адрес d |
| + |
| * |
| Адрес e |
| Адрес f |
| Адрес g |
| Извлечение корня |
| - |
| * |
| : |
Рисунок 4 - Программа загрузки стека для вычисления выражения 1
Безадресные команды с использованием стековой адресации значительно экономят память, сокращают формат команд и повышают производительность компьютеров. Однако безадресное задание операндов имеет ряд недостатков, самым существенным из которых является сложность выполнения команд передачи управления.
В архитектуре современных компьютеров стековая адресация широко используется при обработке подпрограмм и в системах прерываний.
| | Наименование метода адресации | Базовый адрес сегмента | Размер сегмента | База | Индекс | Масштаб | Смещение | Линейный адрес |
| 1 | Базово-индексный со смещением | 4320 | 128 | 32 | 20 | | 20 | 0048h |
| 2 | Базово-индексный | 4320 | 128 | 42 | 30 | | 0 | 0048h |
| 3 | Косвенный регистровый | 4320 | 128 | 72 | 0 | | 0 | 0048h |
1).Базово-индексный с масштабированием

2) Базово-индексный

3
) Косвенный регистровый