Чем отличаются виды адресации
Методы адресации
Методы адресации — в вычислительной технике способы указания на определённую ячейку (ячейки) памяти ЭВМ процессору с целью записи, чтения данных или передачи управления.
Содержание
Задача адресации
Задача адресации заключается в указании на текущую ячейку памяти, к которой происходит обращение процессора. Адрес текущей ячейки как правило записывается в один или несколько регистров процессора. Методы адресации памяти имеют особое значение при программировании на языке низкого уровня (языке ассемблера). Существует два вида адресации: прямая и косвенная.
Способы адресации
Подразумеваемый операнд
В команде может не содержаться явных указаний об операнде; в этом случае операнд подразумевается и фактически задается кодом операции команды.
Подразумеваемый адрес
В команде может не содержаться явных указаний об адресе участвующего в операции операнда или адреса, по которому должен быть размещен результат операции, но этот адрес подразумевается.
Непосредственная адресация
В команде содержится не адрес операнда, а непосредственно сам операнд. При непосредственной адресации не требуется обращения к памяти для выборки операнда и ячейки памяти для его хранения. Это способствует уменьшению времени выполнения программы и занимаемого ею объема памяти. Непосредственная адресация удобна для хранения различного рода констант.
Прямая адресация
Адрес указывается непосредственно в виде некоторого значения, все ячейки располагаются на одной странице. Преимущество этого способа в том, что он самый простой, а недостаток — в том, что разрядность регистров общего назначения процессора должна быть не меньше разрядности шины адреса процессора.
Относительная (базовая) адресация
При этом способе адресации исполнительный адрес определяется как сумма адресного кода команды и базового адреса, как правило хранящегося в специальном регистре — регистре базы.
Относительная адресация позволяет при меньшей длине адресного кода команды обеспечить доступ к любой ячейке памяти. Для этого число разрядов в базовом регистре выбирают таким, чтобы можно было адресовать любую ячейку оперативной памяти, а адресный код команды используют для представления лишь сравнительно короткого «смещения». Смещение определяет положение операнда относительно начала массива, задаваемого базовым адресом.
Укороченная адресация
В адресном поле командного слова содержатся только младшие разряды адресуемой ячейки. Дополнительный указательный регистр.
Регистровая адресация
Регистровая адресация является частным случаем укороченной. Применяется, когда промежуточные результаты хранятся в одном из рабочих регистров центрального процессора. Поскольку регистров значительно меньше чем ячеек памяти, то небольшого адресного поля может хватить для адресации.
Косвенная адресация
Адресный код команды в этом случае указывает адрес ячейки памяти, в которой находится адрес операнда или команды. Косвенная адресация широко используется в малых и микроЭВМ, имеющих короткое машинное слово, для преодоления ограничений короткого формата команды (совместно используются регистровая и косвенная адресация).
Адресация слов переменной длины
Эффективность вычислительных систем, предназначенных для обработки данных, повышается, если имеется возможность выполнять операции со словами переменной длины. В этом случае в машине может быть предусмотрена адресация слов переменной длины, которая обычно реализуется путем указания в команде местоположения в памяти начала слова и его длины.
Стековая адресация
Стековая память, реализующая безадресное задание операндов, особенно широко используется в микропроцессорах и Мини-ЭВМ.
Автоинкрементная и автодекрементная адресации
Поскольку регистровая косвенная адресация требует предварительной загрузки регистра косвенным адресом из оперативной памяти, что связано с потерей времени, такой тип адресации особенно эффективен при обработке массива данных, если имеется механизм автоматического приращения или уменьшения содержимого регистра при каждом обращении к нему. Такой механизм называется соответственно автоинкрементной и автодекрементной адресацией. В этом случае достаточно один раз загрузить в регистр адрес первого обрабатываемого элемента массива, а затем при каждом обращении к регистру в нем будет формироваться адрес следующего элемента массива.
При автоинкрементной адресации сначала содержимое регистра используется как адрес операнда, а затем получает приращение, равное числу байт в элементе массива. При автодекрементной адресации сначала содержимое указанного в команде регистра уменьшается на число байт в элементе массива, а затем используется как адрес операнда.
Автоинкрементная и автодекрементная адресации могут рассматриваться как упрощенный вариант индексации — весьма важного механизма преобразования адресных частей команд и организации вычислительных циклов, поэтому их часто называют автоиндексацией.
Индексация
Для реализуемых на ЭВМ методов решения математических задач и обработки данных характерна цикличность вычислительных процессов, когда одни и те же процедуры выполняются над различными операндами, упорядоченно расположенными в памяти. Поскольку операнды, обрабатываемые при повторениях цикла, имеют разные адреса, без использования индексации требовалось бы для каждого повторения составлять свою последовательность команд, отличающихся адресными частями.
Программирование циклов существенно упрощается, если после каждого выполнения цикла обеспечено автоматическое изменение в соответствующих командах их адресных частей согласно расположению в памяти обрабатываемых операндов. Такой процесс называется модификацией команд, и основан на возможности выполнения над кодами команд арифметических и логических операций.
Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые
Мне периодически приходится объяснять разным людям некоторые аспекты архитектуры Intel® IA-32, в том числе замысловатость системы адресации данных в памяти, которая, похоже, реализовала почти все когда-то придуманные идеи. Я решил оформить развёрнутый ответ в этой статье. Надеюсь, что он будет полезен ещё кому-нибудь.
При исполнении машинных инструкций считываются и записываются данные, которые могут находиться в нескольких местах: в регистрах самого процессора, в виде констант, закодированных в инструкции, а также в оперативной памяти. Если данные находятся в памяти, то их положение определяется некоторым числом — адресом. По ряду причин, которые, я надеюсь, станут понятными в процессе чтения этой статьи, исходный адрес, закодированный в инструкции, проходит через несколько преобразований.
На рисунке — сегментация и страничное преобразование адреса, как они выглядели 27 лет назад. Иллюстрация из Intel 80386 Programmers’s Reference Manual 1986 года. Забавно, что в описании рисунка есть аж две опечатки: «80306 Addressing Machanism». В наше время адрес подвергается более сложным преобразованиям, а иллюстрации больше не делают в псевдографике.
Начнём немного с конца — с цели всей цепочки преобразований.
Физический адрес
Эффективный адрес
Эффективный адрес — это начало пути. Он задаётся в аргументах индивидуальной машинной инструкции, и вычисляется из значений регистров, смещений и масштабирующих коэффициентов, заданных в ней явно или неявно.
Например, для инструкции (ассемблер в AT&T-нотации)
addl %eax, 0x11(%ebp, %edx, 8)
эффективный адрес операнда-назначения будет вычислен по формуле:
eff_addr = EBP + EDX * 8 + 0x11
Логический адрес
Здесь обычно у тех, кто столкнулся с этими понятиями впервые, голова начинает идти кругом. Несколько упростить (или усложнить) ситуацию помогает тот факт, что почти всегда выбор селектора (и связанного с ним сегмента) делается исходя из «смысла» доступа. По умолчанию, если в кодировке машинной инструкции не сказано иного, для получения адресов кода используются логические адреса с селектором CS, для данных — с DS, для стека — с SS.
Линейный адрес
Эффективный адрес — это смещение от начала сегмента — его базы. Если сложить базу и эффективный адрес, то получим число, называемое линейным адресом:
lin_addr = segment.base + eff_addr
Преобразование логический → линейный не всегда может быть успешным, так как при его исполнении проверяется несколько условий на свойства сегмента, записанных в полях его дескриптора. Например, проверяется выход за границы сегмента и права доступа.
Сегментация была модной на некотором этапе развития вычислительной техники. В настоящее она почти всюду была заменена другими механизмами, и используется только для специфических задач. Так, в режиме IA-32e (64-битном) только два сегмента могут иметь ненулевую базу. Для остальных четырёх в этом режиме всегда линейный адрес == эффективный.
Что такое виртуальный адрес?
В литературе и в документации других архитектур встречается ещё один термин — виртуальный адрес. Он не используется в документации Intel на IA-32, однако встречается, например, в описании Intel® Itanium, в котором сегментация не используется. Можно смело считать, что для IA-32 виртуальный == линейный.
В советской литературе по вычислительной технике этот вид адресов также именовался математическим.
Страничное преобразование
Однако общая идея всегда одна и та же: линейный адрес разбивается на несколько частей, каждая из которых служит индексом в одной из системных таблиц, хранящихся в памяти. Записи в таблицах — это адреса начала таблицы следующего уровня или, для последнего уровня — искомая информация о физическом адресе страницы в памяти и её свойствах. Самые младшие биты не преобразуются, а используются для адресации внутри найденной страницы. Например, для режима PAE с размером страниц 4 кбайт преобразование выглядит так:
В разных режимах процессора различается число и ёмкость этих таблиц. Преобразование может завершиться неудачей, если очередная таблица не содержит валидных данных, или права доступа, хранящиеся в последней из них, запрещают доступ к странице; например, при записи в регионы, помеченные как «только для чтения», или попытке чтения памяти ядра из непривилегированного процесса.
Гостевой физический
До введения возможностей аппаратной виртуализации в процессорах Intel страничное преобразование было последним в цепочке. Когда же на одной системе работают несколько виртуальных машин, то физические адреса, получаемые в каждой из них, приходится транслировать ещё один раз. Это можно делать программным образом, или же аппаратно, если процессор поддерживает функциональность EPT (англ. Extended Page Table). Адрес, раньше называвшийся физическим, был переименован в гостевой физический для того, чтобы отличать его от настоящего физического. Они связаны с помощью EPT-преобразования. Алгоритм последнего схож с ранее описанным страничным преобразованием: набор связанных таблиц с общим корнем, последний уровень которых определяет, существует ли физическая страница для указанной гостевой физической.
Полная картина
Я попытался собрать все преобразования адреса в одну иллюстрацию. В ней преобразования обозначены стрелками, типы адресов обведены в рамки.
Как уже было сказано выше, каждое из преобразований может вернуть ошибку для адресов, не имеющих представления в следующем по цепочке виде. Устранение подобных проблем — это задача операционных систем и мониторов виртуальных машин, реализующих абстракцию виртуальной памяти.
Заключение
Адреса
Виды адресации
Адресация- это различные способы указать системе, где находится файл. Адресация бывает двух видов:
Полный (абсолютный) адрес состоит из
Адрес всегда представляется строкой.
Примеры адресной строки в общем виде:
протокол: // сервер / каталог / каталог / файл
протокол: // диск / каталог / каталог / файл
Протоколы обращения к файлам
Протокол- это вид предоставляемого сервиса. К одному и тому же Интернет-серверу можно обращаться по нескольким протоколам, но при этом практически гарантированно сервер будет иметь разное содержание.
http | (hypertext transfer protocol- протокол передачи гипертекста) протокол для обращения к гипертекстовым файлам. Обычно применяется для доступа к WWW(World Wide Web)-серверам. |
ftp | (file transfer protocol- протокол передачи файлов) протокол, применяемый для обращения к файлам, таким как архивы, текст, приложения. ftp представляет собой протокол, более старый, чем http. Если http представляет логически организованную информацию, то ftp предоставляет пользователю доступ к каталогам и файлам в них. |
file | протокол, используемый для работы в локальном режиме. Т.е. обращение к файлу происходит как к обычному файлу DOS (диск, путь, имя файла). |
Наверх
Имя сервера или устройства
Имя сервера обычно состоит из нескольких слов, разделённых точками. Имя сервера требуется указывать для протоколов ftp и http. Для протокола file указывается устройство, от C: до Z:, обычно связанное с накопителем.
Путь к файлу
Файл обычно располагается в каком-либо каталоге. Путь к файлу состоит из названий каталогов, разделённых слешем (прямой слеш /).
Имя файла
Имя файла состоит из непосредственно имени файла и расширения. Для операционной системы MS-DOS и оболочки Win 3.11 имя не превышает 8 символов, расширение- 3 символов. Имя не может содержать точек, т.е. файл с именем 4.1.htm в MS-DOS не допустим. Win 95/98/NT допускает неограниченное (до 255) по длине имя файла и расширение, точки в именах файлов.
Соответственно, требуется оценка, где будет использоваться гипертекстовый справочник/пособие/учебник. Если потребуется перенос под Win 3.11, то лучше сразу привести имена в соответствие с форматом 8.3.
Регистр игнорируется во всех версиях Windows, но принимает важное значение при обращениях к системам Unix, где два имени в разных регистрах соответствуют двум разным файлам.
Первый файл любого проекта имеет имя Index.Htm, это является международным стандартом.
Относительная адресация
Относительная адресация предполагает, что протокол обращения к файлу и устройство (сервер) остаются прежними. Т.е. если есть открытый документ, то адрес можно строить исходя из его текущего положения.
Основные символы, используемые в относительной адресации:
Случаи использования относительной и абсолютной (полной) адресации
Случаи, когда используется полная адресация
Случаи, когда используется относительная адресация
Помимо того, что такой способ задавать полное положение документа прост, также упрощается задача использования документа в локальном режиме. После удаления тега, устанавливающего базовый адрес, ссылки документа будут направлены на локальную машину.
Недостатки видов адресации
Недостаток относительной адресации заключается в том, что схранённая на компьютере страничка не всегда имеет ссылку на сам сервер. Возможно, удивительным кажется тот факт, что пользователь, когда заходит на Интернет-сервер, видит на страничке адрес этого же сервера. С учётом возможного сохранения странички на локальном компьютере, удивление пропадает.
Недостаток полной адресации заключается в том, что от сервера-источника наоборот, не отвязаться. Для использования файлов в локальном режиме, их требуется переправлять.
Использование полной адресации на локальной машине (с привязкой к накопителям), приводит к непереносимости документов. Бывают ситуации, когда при работе в Интернет происходит обращение к диску (например, Q) компьютера в надежде найти какой-то файл.
Какой слеш нужно использовать?
Следует использовать прямой слеш (/) как при работе в Интернет, так и на локальной машине, поскольку это является стандартом. Но не все браузеры способны понять обратный слеш.
Отправка электронной почты
приводит к появлению диалога для отправки электронного сообщения (в случае, если браузер настроен для работы с электронной почтой).
Электронный адрес состоит из следующих компонентов:
Адресация (компьютерная архитектура)
Если команда относится к нескольким операндам (исходным и / или целевым полям), информация, необходимая для адресации, требуется / доступна отдельно для каждого операнда. Другие параметры, содержащиеся в машинной команде (например, информация о длине операндов, индикаторы перехода из логических команд, такие как «равно» или «больше»), не используются для адресации в более узком смысле.
Оглавление
Различия, связанные с типами адресации
Разные имена
Обратите внимание, что не существует универсального соглашения об именах для различных типов / режимов адресации. В частности, разные авторы или производители оборудования иногда используют разные имена для одного и того же режима адреса или одно и то же имя для разных режимов.
Распространены следующие различия в именовании типов адресации. Принципиальное различие состоит в том, что между
В дополнение к различным именам режим адресации, который рассматривается как один режим в одной архитектуре, может означать функциональность, которая обеспечивается двумя или более режимами в другой архитектуре.
Подробно о различных значениях
«Адресация» в деталях может означать разные вещи:
Различия между наборами инструкций
Наборы команд отдельных типов процессоров различаются не только производительностью, но и адресацией. Ниже приведены важные примеры:
Типовые типы адресации процессора
В простейшем случае отдельные ячейки памяти нумеруются последовательно от 0 ( линейное адресное пространство ). В таком случае адрес представляет собой номер определенной области памяти.Регистры процессора обычно также нумеруются последовательно.
С чисто ортогональным набором команд каждая команда может использоваться в любом типе адресации. Однако в общих семействах процессоров существует множество ограничений, так что (ассемблерный) программист должен узнать о «модели программирования» процессора, какие типы адресации фактически доступны для каких инструкций.
Регистрация адресации
При адресации регистров (по-английски «регистр прямой») инструкция относится к содержимому регистра процессора. В случае команд «чтения» операнд уже доступен в регистре и его больше не нужно загружать из памяти. В случае неявной адресации регистров используется регистр, неявно определенный для кода операции (пример: код операции неявно ссылается на аккумулятор). При явной адресации регистров номер регистра вводится в поле регистра машинной команды или является частью кода команды.
Немедленное обращение
Абсолютная или прямая адресация
При таком типе адресации не сам операнд, а его адрес в памяти (где можно найти фактические данные) указывается непосредственно и полностью в команде (опорный уровень 1).
Индексированная и относительная адресация
Этот тип доступа в основном используется для доступа к массивам или составным типам данных.
Поскольку компьютер обычно имеет более одного регистра, инструкция должна содержать указание, какой регистр должен использоваться в качестве базового регистра. В примере предполагается, что для этой цели зафиксирован регистр «index».
Косвенная адресация
Инструкция указывает на регистр или адрес памяти в основной памяти (в случае 6502 на нулевой странице ). Эффективный адрес операции определяется содержимым соответствующего регистра или соответствующей ячейки (ячеек) памяти (опорный уровень 2). При необходимости содержимое дополнительного регистра (индексный регистр) добавляется к определенному таким образом адресу (косвенно-индексированная адресация).
Виртуальная адресация
Здесь описаны инструменты адресации, предоставляемые операционной системой.
Типы ссылок EXCEL на ячейку: относительная (A1), абсолютная ($A$1) и смешанная (A$1) адресация
history 18 ноября 2012 г.
Абсолютная адресация (абсолютные ссылки)
Какая формула лучше? Все зависит от вашей задачи: иногда при копировании нужно фиксировать диапазон, в других случая это делать не нужно.
Другой пример.
Относительная адресация (относительные ссылки)
Теперь примеры.
Пусть в столбце А введены числовые значения. В столбце B нужно ввести формулы для суммирования значений из 2-х ячеек столбца А : значения из той же строки и значения из строки выше.
Альтернативное решение
Другими словами, будут суммироваться 2 ячейки соседнего столбца слева, находящиеся на той же строке и строкой выше. Ссылка на диапазон суммирования будет меняться в зависимости от месторасположения формулы на листе, но «расстояние» между ячейкой с формулой и диапазоном суммирования всегда будет одинаковым (один столбец влево).
Относительная адресация при создании формул для Условного форматирования.
Смешанные ссылки
2. С помощью клавиши F4 (для ввода абсолютной ссылки):
Если после ввода =СУММ(А2:А5 в формуле передвинуть курсор с помощью мыши в позицию левее,
а затем вернуть его в самую правую позицию (также мышкой),
3. С помощью клавиши F4 (для ввода относительной ссылки).
«СуперАбсолютная» адресация
Вопрос: можно ли модифицировать исходную формулу из С2 ( =$B$2^$D2 ), так чтобы данные все время брались из второго столбца листа и независимо от вставки новых столбцов?
Небольшая сложность состоит в том, что если целевая ячейка пустая, то ДВССЫЛ() выводит 0, что не всегда удобно. Однако, это можно легко обойти, используя чуть более сложную конструкцию с проверкой через функцию ЕПУСТО() :