Операнд располагается в памяти
Это наиболее сложный и в то же время наиболее гибкий способ задания операндов. Он позволяет реализовать следующие два основных вида адресации: прямую и косвенную.
В свою очередь, косвенная адресация имеет следующие разновидности:
1) косвенную базовую адресацию; другое ее название – регистровая косвенная адресация;
2) косвенную базовую адресацию со смещением;
3) косвенную индексную адресацию со смещением;
4) косвенную базовую индексную адресацию;
5) косвенную базовую индексную адресацию со смещением.
Операндом является порт ввода/вывода
Помимо адресного пространства оперативной памяти, микропроцессор поддерживает адресное пространство ввода-вывода, которое используется для доступа к устройствам ввода-вывода. Объем адресного пространства ввода-вывода составляет 64 Кбайт. Для любого устройства компьютера в этом пространстве выделяются адреса. Конкретное значение адреса в пределах этого пространства называется портом ввода-вывода. Физически порту ввода-вывода соответствует аппаратный регистр (не путать с регистром микропроцессора), доступ к которому осуществляется с помощью специальных команд ассемблера in и out.
Например:
in al,60h; ввести байт из порта 60h
Регистры, адресуемые с помощью порта ввода-вывода, могут иметь разрядность 8,16 или 32 бит, но для конкретного порта разрядность регистра фиксирована. Команды in и out работают с фиксированной номенклатурой объектов. В качестве источника информации или получателя применяются так называемые регистры-аккумуляторы ЕАХ, АХ, AL. Выбор регистра определяется разрядностью порта. Номер порта может задаваться непосредственным операндом в командах in и out или значением в регистре DX. Последний способ позволяет динамически определить номер порта в программе.
Операнд находится в стеке
Команды могут совсем не иметь операндов, иметь один или два операнда. Большинство команд требуют двух операндов, один из которых является операндом-источником, а второй – операндом назначения. Важно то, что один операнд может располагаться в регистре или памяти, а второй операнд обязательно должен находиться в регистре или непосредственно в команде. Непосредственный операнд может быть только операндом-источником. В двухоперандной машинной команде возможны следующие сочетания операндов:
1) регистр – регистр;
2) регистр – память;
3) память – регистр;
4) непосредственный операнд – регистр;
5) непосредственный операнд – память.
У данного правила есть исключения, которые касаются:
1) команд работы с цепочками, которые могут перемещать данные из памяти в память;
2) команд работы со стеком, которые могут переносить данные из памяти в стек, также находящийся в памяти;
3) команд типа умножения, которые, кроме операнда, указанного в команде, используют еще и второй, неявный операнд.
Из перечисленных сочетаний операндов наиболее часто употребляются регистр – память и память – регистр. Ввиду их важности рассмотрим их подробнее. Обсуждение мы будем сопровождать примерами команд ассемблера, которые будут показывать, как изменяется формат команды ассемблера при применении того или иного вида адресации. В связи с этим посмотрите еще раз на рисунке 21, на котором показан принцип формирования физического адреса на адресной шине микропроцессора. Видно, что адрес операнда формируется как сумма двух составляющих – сдвинутого на 4 бита содержимого сегментного регистра и 16-битного эффективного адреса, который в общем случае вычисляется как сумма трех компонентов: базы, смещения и индекса.
Перечислим и затем рассмотрим особенности основных видов адресации операндов в памяти:
1) прямую адресацию;
2) косвенную базовую (регистровую) адресацию;
3) косвенную базовую (регистровую) адресацию со смещением;
4) косвенную индексную адресацию со смещением;
5) косвенную базовую индексную адресацию;
6) косвенную базовую индексную адресацию со смещением.
Прямая адресация
Это простейший вид адресации операнда в памяти, так как эффективный адрес содержится в самой команде и для его формирования не используется никаких дополнительных источников или регистров. Эффективный адрес берется непосредственно из поля смещения машинной команды (см. рис. 20), которое может иметь размер 8, 16, 32 бит. Это значение однозначно определяет байт, слово или двойное слово, расположенные в сегменте данных.
Читать дальше
Конец ознакомительного отрывка
Купить книгу