Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Белош_Лекции_4_курс_2010г.doc
Скачиваний:
27
Добавлен:
16.07.2019
Размер:
2.92 Mб
Скачать

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

При регистровой адресации операнд нах-ся в указанном регистре, процессор извлекает или загружает операнд в регистр.

Например :     MOV AX,CX   означает загрузить операнд из СХ в АХ. Первый операнд содержится в СХ и загружается в аккумулятор АХ, содержимое СХ при этом не меняется.

  Непосредственная адресация - в этом случае 8 или 16 разрядная константа указывается в качестве операнда источника, эта константа содержится в команде, в команду она вставляется транслятором с ассемблера.

Например:      MOV  CX,500  означает, что значение 500 загружается в регистр СХ.

Непосредственный операнд может быть задан идентификатором(меткой),эта метка предварительно задается с помощью специального оператора EQU.

Например: если метка К имеет значение 200,т.е      

K EQU 200     .     . MOV CX,K

Эти две строки обозначают, что некоторой метке К заранее присваивается необходимое значение, например 200, и в последующем эта метка используется в программе, последняя строка означает, что в СХ будет загружено значение метки К, т.е. 200.

Режимы адресации памяти

Доступ к ячейкам памяти обеспечивается взаимодействием операционного блока и интерфейса шины, когда операционный блок работает с операндом из памяти, он передаёт значение смещение интерфейсу шины. Интерфейс шины добавляет это смещение к содержимому регистра сегмента, дополненному четырьмя нулями и тем самым получает 20 битовый физический адрес ,который и используется для доступа к операнду. Смещение, которое вычисляется операционным блоком для доступа нах-ся в памяти операнда наз-ся исполнительным  адресом операнда. Он показывает на каком расстоянии в байтах располагается искомый операнд от начала сегмента в котором он нах-ся.

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

При прямой адресации исполнительный адрес яв-ся составной частью команды, так же как значение при непосредственной адресации, микропроцессор добавляет этот исполнительный адрес, к сдвинутому содержимому регистра сегмента данных ДS и получает 20-ти битовый физический адрес операнда. Обычно прямая адресация используется когда операндом яв-ся метка.

Например:   MOV AX, Table      -  это означает, что команда MOV загружает ячейки помеченные меткой Table в регистр аккумулятора.

Приведем схему выполнения поиска операнда

Использование в команде метки Table указывает на ячейку N0001 с которой начинается слово Table. Младший байт нах-ся по адресу 0001, а старший 0002 и это слово загружается в регистр аккумулятора. В памяти слово Table занимает 2 байта,т.е 2 ячейки, старший байт АА нах-ся в ячейке с большим адресом. Если метка не используется, то необходимое смещение задается в команде, при этом значение полей команды такое, что процессор понимает, что это прямая адресация и использует смещение для поиска нужной ячейки от начала сегмента.

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

В этом случае исполнительный адрес операнда, т.е смещение от начала сегмента может содержаться в следующих 4-ёх регистрах:  -в базовом регистре BX

-в регистре указателя базы BP

-в индексном SI

-в индексном указателе базы ДI.

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

Т.е регистр BX содержит смещение от начала сегментов данных до первого байта искомого слова, в нашем случае это 0001. При работе с ассемблером можно предварительно загрузить смещение в регистр BX используя метку Table, в этом случае используется оператор «OFFSET»- наити смещение.

Пример:    MOV ДХ,OFFSET Table

Это означает, что смещение метки Table  от начала сегмента будет загружена в регистр ДХ, после этого пишем основной оператор.

Пример:    MOV AX,[BX]

Эти две команды выполняют одно и то же действие, что и рассмотренная ранее

                    MOV AX,Table

Если же мы работаем всего лишь с меткой Table один раз, то практичнее пользоваться одной командой, если же с массивом Table будем работать несколько раз, то практичнее пользоваться двумя командами, изменяя содержимое BX мы можем задавать обращение к различным элементам таблицы внутри сегмента данных.