Регистровая и непосредственная адресация
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

При регистровой адресации микропроцессор извлекает операнд из регистра (или загружает его в регистр). Например, команда MOV АХ,СХ копирует 16-битовое содержимое счетчика СХ в регистр аккумулятор АХ. Содержимое регистра СХ после операции не изменяется. В данном примере микропроцессор 8088 использует регистровую адресацию для извлечения операнда-источника из регистра СХ и загрузки его в регистр-приемник АХ.

Непосредственная адресация позволяет указывать в качестве операнда-источника 8-или 16-битовое значение константы. Эта константа находится в команде  (куда она помещается ассемблером), но не в регистре и не в ячейке памяти.       Например,  команда MOV СХ,500

загружает десятичное число 500 в регистр СХ,  а команда    MOV CL,-З0

загружает значение -30 в регистр CL.

Непосредственный операнд также может быть идентификатором, определенным оператором EQU, поэтому в командах допустима следующая форма оператора:

К EQU 1O24; присвоить константе 1024 идентификатор  К и  

MOV СX,К; загрузить эту константу регистр СХ.

Чтобы избежать ошибок, необходимо учитывать, что допустимые значения для 8-битовых чисел со знаком ограничены диапазоном от - 128 (З0Н) до +127 (7FH), 16-битовых чисел со знаком диапазоном от -32768 (8000Н) до +32767 (7FFFH). Максимальное значение 8-битовых чисел без знака равно 255 (0FFH), а 16-битовое равно  65535 (0FFFFH).

Необходимо помнить, что ассемблер всегда расширяет знак при пересылке непосредственных значений в операнд-приемник. Это означает, что он дублирует старший бит источника до тех пор, пока не будут заполнены все 8 или 16 битов операнда-приемника. Например, операнд-источник второго примера, десятичное число 500, может быть записано в виде 10-битового двоичного числа 01 1111 0100. Когда ассемблер устанавливает, что требуется загрузить это число в регистр СХ, то он расширяет его до 16-битового, записывая перед ним шесть копий знакового бита (в данном случае 0). Поэтому в регистр СХ попадает двоичное значение 0000 0001 1111 0100В. В третьем примере процессор загружает в регистр СL 8-битовое двоичное представление отрицательного числа -30 в дополнительном коде.

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

При прямой адресации доступ к ячейкам памяти обеспечивает­ся взаимодействием операционного блока и блока преобразования адресов. Когда операционному блоку требуется прочитать или записать операнд, находящийся в памяти, он передает значение смещения адреса блоку преобразования адресов. Последний добавляет это смещение к содержимому регистра сегмента (предварительно умноженному на 10h, то есть дополненному четырьмя нулями) и тем самым получает 20-битовый физический адрес, который и используется для доступа к операнду.

Смещение, которое вычисляется операционным блоком для доступа к находящемуся в памяти операнду, называется исполнительным адресом операн­да. Исполнительный адрес показывает, на каком расстоянии (в байтах) располага­ется операнд от начала того сегмента, в котором он находится. Будучи 16-битовым числом без знака, исполнительный адрес позволяет получить доступ к операндам, находящимся выше начала сегмента на расстоянии до 65536 (или 64К) байтов.

При прямой адресации исполнительный адрес является составной частью команды (так же, как значения при непосредственной адресации). Микро­процессор добавляет этот исполнительный адрес к сдвинутому, влево на четыре разряда, содержимому регистра сегмента данных DS и получает 20-битовый физический адрес операнда в сегменте данных. Обычно прямая адресация применяется, если операндом служит метка или идентификатор некоторых данных, которым ассемблер при трансляции присваивает 16–битовое двоичное значение. Напри­мер, команда MOV AX,TABL загружает содержимое ячейки памяти по имени TABL в регистр АХ. Здесь ассемблер сам заменяет метку TABL на соответствующий адрес. Если перед меткой не указан сегментный регистр, то процессор по умолчанию устанавливает сегментный регистр DS. В случае, когда данные находятся в других сегментах, необходимо явно указать имя требуемого сегмента. Например:

MOV AX,TABL; ячейка TABL находится в сегменте данных DS,

MOV AX,ES:TABL; ячейка TABL  находится уже в дополнительном  

                              сегменте  ES.

Дата: 2018-11-18, просмотров: 399.