Относительная адресация или базирование — КиберПедия 

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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Относительная адресация или базирование

2022-10-05 24
Относительная адресация или базирование 0.00 из 5.00 0 оценок
Заказать работу

Здесь исполнительный адрес определяется суммой адресного кода и некоторого базового адреса : . Так как операция сложения требует некоторое время, то часто используют совмещение, например, когда  представляет старшие разряды, а  - младшие разряды исполнительного адреса.

Укороченная адресация

Укороченная адресация используется для адресации некоторого фиксированного числа специально выделенных ячеек коротким адресом.

Регистровая адресация

Регистровая адресация - это вариант укороченной адресации, предназначенный для адресации внутренних регистров процессора.

Автоинкрементная (автодекрементная) адресация

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

Особенности адресации памяти процессором семейства Intel 80x86 (реальный режим)

Сегментация памяти

Внутренние регистры процессора Intel, в том числе используемые для адресации, имеют 16 двоичных разрядов, что позволяет хранить значения в диапазоне от 0 до 65535. Таким образом, с помощью одного регистра можно было бы адресовать всего лишь 64 килобайт памяти. Для того чтобы снять столь жесткие ограничения, используется сегментация памяти, а исполнительный адрес формируется из пары значений: адреса сегмента и смещения внутри сегмента.

Определение 2.3

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

Хотя сегмент может располагаться в любом месте памяти и иметь размер до 64 Кбайт, он будет занимать столько памяти, сколько необходимо для выполнения программы.

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

.

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

Адрес в сегменте данных: 045F016
Смещение: 003216
Исполнительный адрес: 0462216

Таким образом, используя сегментацию, можно адресовать ячейки памяти в диапазоне от 0 до FFFFF16, т.е. в общей сложности 10000016=104857610 байт памяти.

Регистровая адресация

Процессоры семейства Intel 80x86 имеют 14 внутренних регистров, используемых для управления выполняющейся программой, для адресации памяти и обеспечения арифметических вычислений. Каждый регистр имеет длину в одно слово (16 бит), адресуется в языке Assembler по имени и имеет строго определенное назначение. Рассмотрим их подробнее.

1. Сегментные регистры: CS, DS, SS и ES. Каждый сегментный регистр обеспечивает адресацию памяти объемом до 64 Кбайт, которая называется текущим сегментом. Как показано ранее, сегмент выровнен на границу параграфа и его адрес в сегментном регистре предполагает наличие справа четырех нулевых битов.

Регистр CS. Регистр сегмента кода содержит начальный адрес сегмента кода. Этот адрес плюс значение смещения в командном указателе IP определяют адрес команды, которая должна быть выбрана для выполнения. Для обычных программ нет необходимости делать ссылки на регистр CS.

Регистр DS. Регистр сегмента данных содержит начальный адрес сегмента данных. Этот адрес плюс значение смещения, определенное в команде, указывают на конкретную ячейку в сегменте данных.

Регистр SS. Регистр сегмента стека содержит начальный адрес сегмента стека.

Регистр ES. Некоторые операции над строками используют дополнительный сегментный регистр для управления адресацией памяти. В данном контексте регистр ES связан с индексным регистром DI. Если необходимо использовать регистр ES, ассемблерная программа должна его инициализировать.

2. Регистры общего назначения: AX, BX, CX и DX. При программировании на языке Assembler регистры общего назначения являются «рабочими лошадками». Особенность этих регистров состоит в том, что возможна адресация их как одного целого слова или как однобайтовой части. Левый байт является старшей частью (high), а правый - младшей (low). Например, двухбайтовый регистр CX состоит из двух однобайтовых CH и CL, и ссылки на регистр возможны по любому из трех имен.

Регистр AX. Регистр AX является основным сумматором и применяется для всех операций ввода-вывода, некоторых операций над строками и некоторых арифметических операций.

Регистр BX. Регистр BX является базовым регистром. Это единственный регистр общего назначения, который может быть использован в качестве «индекса» для расширенной адресации. Другое общее его применение - вычисления.

Регистр CX. Регистр CX является счетчиком. Он необходим для управления циклами и для операций сдвига. Регистр CX используется также и для вычислений.

Регистр DX. Регистр DX является регистром данных. Он применяется для операций ввода-вывода и некоторых операций умножения и деления над большими числами.

3. Регистровые указатели: SP и BP. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека. Реже они используются для операций сложения и вычитания.

Регистр SP. Указатель стека обеспечивает использование стека в памяти, позволяет временно хранить адреса и иногда данные. Этот регистр связан с сегментным регистром SS для адресации стека.

Регистр BP. Указатель базы облегчает доступ к данным (параметрам и адресам), переданным через стек.

4. Индексные регистры: SI и DI. Оба индексных регистра могут применяться для расширенной адресации и для использования в операциях сложения и вычитания.

Регистр SI. Этот регистр является индексом источника и применяется для некоторых операций над строками. В данном контексте регистр SI связан с регистром DS.

Регистр DI. Этот регистр является индексом назначения и применяется также для строковых операций. В данном контексте регистр DI связан с регистром ES.

5. Регистр командного указателя: IP. Регистр IP содержит смещение на команду, которая должна быть выполнена. Он всегда связан с регистром CS. Обычно этот регистр в программе в явной форме не должен применяться.

6. Флаговый регистр. Девять из 16 бит флагового регистра являются активными и определяют текущее состояние машины и результаты выполнения команд. Многие арифметические операции и команды сравнения изменяют состояние флагов. Назначение флаговых битов следующее:

Флаг Назначение
O (Переполнение) Указывает на переполнение старшего бита при арифметических командах.
D (Направление) Обозначает левое или правое направление пересылки или сравнения строковых данных.
I (Прерывание) Указывает на возможность внешних прерываний.
T (Пошаговый режим) Обеспечивает возможность работы процессора в пошаговом режиме.
S (Знак) Содержит результирующий знак при арифметических операциях (0 - плюс, 1 - минус).
Z (Ноль) Показывает результат арифметических операций и операций сравнения (0 - ненулевой, 1 - нулевой результат).
A (Внешний перенос) Содержит перенос из 3-го бита для 8-битовых данных, используется для специальных арифметических операций.
P (Контроль четности) Показывает четность младших 8-битовых данных (1 - четное, 0 - нечетное число).
C (Перенос) Содержит перенос из старшего бита после арифметических операций, а также последний бит при сдвигах или циклических сдвигах.

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

Формирование адресного кода

Способы формирования адресного кода в командах языка Assembler в целом совпадают с перечисленными выше. Приведем примеры различных способов написания адресного кода.

Непосредственная адресация. Здесь в качестве операнда указывается непосредственно само значение. Например, команда

mov AX,25

засылает значение 25 в регистр AX. Второй операнд в этой команде является операндом с непосредственной адресацией.

Регистровая адресация. При регистровой адресации в языке Assembler указывается мнемонический код регистра. Например, команда

mov BX,AX

пересылает содержимое регистра AX в регистр BX. Оба операнда здесь являются операндами с регистровой адресацией.

Прямая адресация. Имеется несколько разновидностей формирования адресных кодов с прямой адресацией: с явным указанием смещения относительно начала сегмента и с указанием мнемонического обозначения (метки) поля в сегменте данных. Во втором случае компилятор сам вычислит по метке смещение относительно начала сегмента и разместит его в коде команды. Например, команда

mov AX,DS:[25]

возьмет значение, располагающееся в слове со смещением 25 в сегменте данных, и зашлет его в регистр AX. Обратите внимание на отличие этой команды от команды с непосредственной адресацией.

Команда

mov AX,WORDA

зашлет в регистр AX слово, помеченное меткой WORDA в сегменте данных, а команда

mov AX,WORDA+4

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

Индексная адресация является более общей формой косвенной адресации. При индексной адресации памяти ссылка на операнд определяется через базовый или индексный регистр, константы, переменные смещения и простые переменные. Квадратные скобки, определяющие операнды индексной адресации, действуют, как знак плюс (+). Для индексной адресации памяти используются:

· Базовый регистр BX в виде [BX]вместе с сегментным регистром DS или базовый регистр BP в виде [BP] вместе с сегментным регистром SS. Например, с помощью команды
                      mov DX,[BX]
в регистр DX пересылается из памяти элемент, взятый по относительному адресу в регистре BX относительно начала сегмента, заданного адресом в регистре DS. В адресном коде можно явно указывать сегментный регистр, относительно которого производится смещение:
                      mov DX,DS:[BX].

· Индексный регистр DI в виде [DI] или индексный регистр SI в виде [SI], оба с сегментным регистром DS. Например, с помощью команды
                      mov AX,[SI]
в регистр AX пересылается элемент, взятый по относительному адресу в регистре SI относительно начала сегмента, заданного адресом в регистре DS. Можно также явно указывать сегментный регистр, относительно которого производится смещение:
                      mov AX,DS:[SI].

· Константа в виде непосредственного номера или имени, заключенная в квадратные скобки. Например, с помощью команды
                   mov [BX+SI+4],AX
содержимое регистра AX пересылается в область сегмента со смещением, которое вычисляется как сумма относительного адреса в регистре BX, относительного адреса в регистре SI и константы 4. Смещение производится относительно начала сегмента с адресом в регистре DS. Можно также явно указывать сегментный регистр.

· Смещение (+ или -), заданное в виде константы или метки поля, совместно с индексным операндом. Например, с помощью команды
                      mov DX,8[DI]
в регистр DX пересылается элемент, взятый из сегмента по смещению 8 плюс по смещению из регистра DI, а команда
                      mov DX,WORDA[DI]
выполняет то же действие над элементом, взятым из сегмента по смещению поля, помеченного меткой WORDA, плюс по смещению из регистра DI.

Все эти операнды можно комбинировать в любой последовательности, но нельзя использовать одновременно два базовых регистра [BX+BP] или два индексных регистра [SI+DI]. Обычно индексная адресация используется для локализации элементов данных в массивах.

2.4. Задания для самостоятельной работы

1. Пусть имеются фрагменты ассемблерной программы

; фрагмент a)
mov AX,7173;пересылка
add AX,37;сложение
mov BX,AX;пересылка

; фрагмент b)
mov AX,11316;пересылка
sub AH,16;вычитание
add AL,32;сложение
mov BX,AX;пересылка

; фрагмент c)
mov AX,62657;пересылка
sub AH,AL;вычитание
mov BX,AX;пересылка

Какие значения будут содержаться в регистре BX после выполнения каждого из этих фрагментов?

2. Пусть следующие разряды флагового регистра содержат значения: O=0, S=0, Z=1, C=0. Какие значения будут в этих разрядах после выполнения каждой команды следующего фрагмента программы?

mov AX,10
mov BX,20
add BX,15
sub AX,BX
add AX,25
sub AX,20406
sub BX,BX
sub BX,8169
add AX,BX

3. Пусть в программе определен сегмент данных следующим образом.

Листинг 2.1

DTSG segment para 'Data';начало сегмента с именем DTSG
А    dw 100 dup(?); поле A - 100 слов
B db 50 dup(?)     ; поле B - 50 байт
C dw 65      ; поле C - слово со
                                                      ; значением 65
D db 84      ; поле D - байт со
                                                    ; значением 84
X dw 0
Y dw 34
Z dw 0
DTSG ends                         ;конец сегмента

Во время выполнения программы в регистре DS сегмента данных оказалось значение 1F3516. Определите исполнительный адрес ячейки памяти, помеченной меткой X.

4. Пусть в программе определен сегмент данных из предыдущего задания (листинг 2.1), адрес которого находится в сегменте DS. Каким образом изменится содержимое сегмента в результате выполнения следующего фрагмента программы?

Листинг 2.2

mov BX,3
mov AX,C
add AX,DS:[255]
mov C[BX],AX
mov SI,252
mov AX,[BX+SI]
mov Y+2,AX


Поделиться с друзьями:

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.037 с.