Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
24
Добавлен:
25.08.2019
Размер:
526.34 Кб
Скачать

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

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

INC OPND.

В примере команда ассемблера

OPND DW ?

объявляет OPND участком памяти длиной в слово. Когда программа ипользует OPND в качестве операнда, ассемблер помещает адрес OPND в машинную команду. В данном примере вы можете видеть адрес 0123 как часть команды в объектном коде. Этот способ называют прямой адресацией, поскольку команда непосредственно в себе содержит адрес операнда

3.5. Вычисление адресов

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

DIMENTION OPND(20)

В других языках высокого уровня существуют аналогичные способы создания массивов. При выполнении программа получает доступ к разным элементам в соответствии со значением индекса,например, OPND(5). Написание программы на языке ассемблера требует от программиста вычисления местонахождения пятого элемента в поле данных OPND. Затем программа может использовать полученное значение для прямой адресации. Однако, в случае с выражением OPND(I), где I вычисляется входе выполнения программы, способа прямого указания правильного адреса для программы на языке ассемблера не существует. Адрес должен вычисляться в ходе выполнения программы. Набор команд 8088 допускает несколько способов определения исполнительного адреса (Effective Address - EA) операнда. Эти способы вычисления адреса называют способами адресации. Их количество предназначено для облегчения задачи определения исполнительных адресов. Благодаря правильному выбору способа адресации программист может минимизировать количество вычислений в программе. Формула для определения I-го элемента массива OPND такова:

EA = адрес базы OPND + (I * длина),

где длина - это длина каждого элемента массива. В данном примере OPND - массив, состоящий из слов, поэтому каждый элемент в нем имеет длину 2 байта. Тогда формула выглядит так:

EA = адрес базы + (I * 2)

Для вычисления этого адреса требуется по крайней мере один регистр, содержащий адрес операнда. Программа может вычислить исполнительный адрес, оставив результат в одном из регистров. Тогда, вместо указния адреса в самой команде INC,  можно просто указать, какой из регистров его содержит. Для хранения адресов операндов программа может использовать любой из четырех адресных регистров. Так, в нашем примере программа добавляет к адресу базы 2*I и помещает результат в регистр BX. Соответствующий элемент вектора в этом случае будет увеличиваться командой

INC   WORD PTR [BX]

Выражение [BX] сообщает ассемблеру, что регистр BX содержит адрес операнда,а не является операндом сам по себе. Скобки [ и ], заключающиекакое-либо значение, указывают ассемблеру, что это значение - адрес. Другая часть операндного выражения, WORD PTR, требуется ассемблеру для информации, что операнд является переменной типаWORD (слово). Далее мы обсудим оператор PTR более подробно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]