Базово-индексная адресация и ее развитие
в виде базово-индексной адресации с масштабированием
Более сложным видом относительной адресации является базово-индексная адресация (Рис.3.3). При ее использовании в адресной части команды выделяются три поля: база (base), индекс (index) и смещение (displacement), а исполнительный адрес формируется как сумма из трех компонент.
Поля base и index команды содержат адреса РОН, в которых в свою очередь находятся компоненты исполнительного адреса – базовый адрес (Base) и индекс (Index).
Частным случаем базово-индексной адресации является отсутствие смещения и формирование адреса из 2 компонент (база и индекс). Для уточнения этого случая соответствующий режим адресации принято называть базово-индексной адресацией без смещения.
Рис.3.3. Базово-индексная адресация со смещением
Дальнейшим развитием базово-индексной адресации является базово-индексная адресация с масштабированием, которая используется в старших моделях семейства 80х86 (начиная с 80386). При использовании масштабирования индекс как одна из компонент адреса предварительно умножается на заданный в машинной команде масштаб. Типичными значениями масштаба являются 2, 4, 8.
Косвенная адресация
При использовании косвенной адресации в адресной части команды задается не адрес операнда, а адрес адреса операнда. Принято различать 2 вида косвенной адресации:
а) косвенная регистровая (в команде задается адрес регистра, содержащего адрес операнда, находящегося в памяти).
|
|
б) косвенная адресация с использованием памяти (в команде задается адрес ячейки памяти, в которой содержится адрес операнда). В принципе адрес ячейки памяти может быть как прямым, так и относительным.
Рис.3.4. Косвенная адресация
Дальнейшим развитием косвенной регистровой адресации являются так называемые автоинкрементная и автодекрементная адресации. При автоинкрементной адресации содержимое адресуемого в команде регистра сначала используется как адрес операнда, а затем наращивается (инкрементируется) на длину операнда. При автодекрементной адресации содержимое адресуемого регистра сначала уменьшается (декрементируется) на длину операнда, а затем используется как адрес этого операнда. Эти режимы адресации находят широкое применение в ЭВМ с архитектурой DEC (М6800).
Автоинкрементную и автодекрементную адресации целесообразно использовать при работе со стеком.
Непосредственная адресация
При использовании непосредственной адресации в адресной части команды задается не адрес операнда, а сам операнд. Непосредственный операнд может являться только программной константой, но не переменной, т.к. его значение должно формироваться на этапе компиляции. Использование непосредственной адресации по сравнению с прямой для программных констант имеет следующие преимущества:
|
|
1) Экономия памяти, т.к. операнд представляется в команде и не требует дополнительной ячейки памяти как при прямой адресации.
2) Экономия времени. При выборке операнда не тратится время на обращение к памяти, как при прямой адресации, т.к. операнд выбирается вместе с командой на этапе выборки команды.
Неявная адресация
При использовании неявной адресации либо адрес операнда, либо сам операнд не задаются, а лишь подразумеваются. Использование неявной адресации позволяет в значительной степени сократить длину машинного (объектного) кода программы за счет отсутствия в нем адресов неявных операндов, а также самих неявных операндов.
Классическими примерами неявной адресации могут служить:
1) Аккумуляторные команды, в которых адрес аккумулятора, где находится сначала операнд, а затем и результата операции, не задается.
В базовой модели Intel 8086 байтным аккумулятором является регистр AL, двухбайтным – АХ, четырехбайтным – комбинация регистров АХ (младшие разряды) и DX (старшие разряды).
|
|
2) Стековые команды, в которых адрес указателя стека (SP) задается неявно.
Примерами использования неявного операнда могут служить:
1) те же стековые команды, в которых константа изменения указателя стека, равная 2, не задается, а подразумевается.
2) команды инкремента и декремента (INC и DEC), в которых константа изменения операнда, равная 1, подразумевается, а не задается.
6. Система команд. Основные группы, кратко о каждой группе команд.
БАЗОВАЯ СИСТЕМА КОМАНД
Она включает в себя более 100 различных мнемокодов команд (мнемокод – это буквенное кодирование операций).
С учетом разнообразных форматов команд и режимов адресации число разнообразных машинных команд, по мнению фирмы Intel, составляет более 3800.
По функциональному назначению команды можно разделить на следующие типы:
1.Команды пересылки данных, осуществляющие обмен информацией между регистрами, ячейками данных и портами ввода-вывода.
2. Арифметические команды, выполняющие арифметические операции над двоичными или двоично-десятичными (в формате BCD – binary-coded decimal) числами.
3. Команды манипулирования битами, выполняющие сдвиг, циклический сдвиг и логические операции со значениями регистров и ячеек памяти.
|
|
4. Команды передачи управления, управляющие последовательностью исполнения команд программы. К ним относятся переходы к другой команде, вызов процедуры и возврат из нее.
5. Команды обработки строк, перемещающие, сравнивающие и сканирующие строки данных.
6. Команды прерывания, отвлекающие микропроцессор на обработку некоторых специфичных ситуаций.
7. Команды управления процессором, устанавливающие и сбрасывающие флаги состояния, а также изменяющие режим функционирования микропроцессора.
7. Команды пересылок и работы со стеком. Их назначение, синтаксис, примеры.
MOV (MOVe data) – пересылка данных.
Команда передает значение операнда-источника в операнд-приемник. Команда MOV не может пересылать данные из одной области памяти в другую, для таких пересылок может быть использована команда MOVS.
В ассемблерной нотации команда представляется в виде: MOV dst, src.
Содержимое src пересылается на место dst (dst – приемник, src – источник).
dst := r, mem, sr (r –регистр, mem – память, sr – сегментный регистр),
src = r, mem, sr, imm (imm – непосредственный операнд).
В зависимости от используемого формата и режима адресации команда MOV может реализовать следующие передачи данных:
reg à reg (reg - регистр общего назначения);
imm à reg;
imm à mem;
reg à mem;
mem à reg;
reg à sr;
mem à sr;
sr à reg;
sr à mem.
Направление пересылки в машинном формате команды определяется специальным битом d (direct) кода операции. С помощью команды MOV нельзя реализовать пересылки типа:
mem à mem;
sr à sr;
imm à sr;
dst ¹ CS (В качестве приемника не может использоваться сегментный регистр CS – сегмент кода).
Дата добавления: 2018-04-04; просмотров: 1009; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!