Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Ассемблеру.docx
Скачиваний:
12
Добавлен:
09.11.2018
Размер:
125.1 Кб
Скачать
    1. Адресация

Для адресации данных в процессоре 8086 можно использовать несколько способов. Данные хранятся в сегменте данных. Сегмент данных определяется программистом, а адреса данных задаются им с помощью меток.

Адрес любого байта задается двумя 16-битовыми словами - сегментом и смещением. При формировании 20-разрядного полного адреса, необходимого для адресации в пределах 1 Мбайт, сегмент сдвигается влево на 4 разряда (т.е. умножается на 16) и складывается со смещением. Поскольку емкость 16-разрядного смещения составляет 65536 значений, в пределах одного сегмента можно адресовать до 64 Кбайт.

Архитектура МП позволяет использовать семь различных способов адресации.

Непосредственная адресация

Это самый простой способ адресации – вместо адреса в поле операнда команды указывается сам операнд, например: 25, -6, 100. В общем виде операнд записывается как числовая константа.

Регистры

Поле операнда

в команде Операнд

Опер. память

Примеры:

mov ax,100 {Загружаем в АХ значение 100}

add ax, 5 {К содержимому АХ прибавляем 5}

mov cx,$FFFF {Помещаем в СХ значение 65535}

Прямая адресация

Адрес операнда задается в явном виде меткой. В общем виде адрес записывается как <метка><константа>.

Регистры

Поле операнда

в команде Операнд

Опер. память

Смещение операнда задается в теле программы и складывается с регистром DS, например:

var

X: Word; В: Byte;

mоv ах,Х {Пересылаем значение переменной X регистр АХ}

add ah,В {К содержимому регистра АН прибавляем значение переменной В}

mov X,ax {Пересылаем содержимое регистра АХ в область памяти переменной X}

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

В поле операнда указывается имя регистра. Общий вид: <имя регистра>.

Регистры

Поле операнда

в команде Операнд

Опер. память

Примеры:

mov ax,bx {Извлекаем из ВХ и помещаем в АХ}

add сх,ах {Содержимое АХ прибавляем к СХ}

push сx {Заталкиваем в стек содержимое СХ}

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

Исполнительный адрес операнда (точнее, его смещение) содержится в одном из регистров ВХ, ВР, SI или DI. Для указания косвенной адресации этот регистр должен заключаться в квадратные скобки, например: [SI], [DI], [BX]. Другие регистры при косвенной адресации недопустимы.

Каждый из регистров BX...DI по умолчанию работает со своим сегментным регистром:

DS:BX, SS:BP, DS:SI, ES:DI

Если необходимо обратиться к данным из другого сегмента, например ES, необходимо использовать так называемую замену сегмента. Для этого перед [Рег] указывают имя сегментного регистра и ставят двоеточие, например, так: mov ax,es:[bx]

Регистры

Поле операнда

в команде Операнд

Опер. память

Пример:

mov ax,[bx] {Содержимое 16-разрядного слова, хранящегося в памяти по адресу DS:BX, пересылаем в регистр АХ}