![](/user_photo/2706_HbeT2.jpg)
- •2.4. Машинный язык и язык Ассемблера
- •2.5. Синаксис языка Ассемблера
- •2.6. Принципы работы Ассемблера
- •2.7. Биты, байты и слова
- •2.8. Нумерация бит
- •2.9. Набор символов
- •2.10. Принципы работы компьютера
- •2.11. Процедуры
- •2.12. Стек
- •2.13. Прерывания
- •3.1. Модель программирования 8088
- •3.2. Регистры общего назначения
- •3.3. Регистры адресации
- •3.4. Прямая адресация
- •3.5. Вычисление адресов
- •3.6. Адресация через базу и смещение
- •3.8. Байт mod r-m
- •3.9 Физическая адресация
- •3.10. Сегментные регистры
- •3.11. Предназначение сегментов
- •3.12. Оператор Segment
- •3.13. Оператор Assume
- •3.14. Управляющие рагистры
- •3.14.1. Указатель инструкций (ip)
- •3.14.2. Указатель стека
- •3.14.3. Регистр флагов
- •3.14.4. Флаг знака
- •3.14.5. Флаг нуля
- •3.14.6. Флаг четности
- •3.14.7. Флаг переноса
- •3.14.8. Дополнительный флаг переноса
- •3.14.9. Флаг переполнения
- •3.14.10. Флаг захвата
- •3.15. Векторы прерываний
- •Глава 4 - Набор команд микропроцессора 8088
- •4.1. Пересылка данных
- •4.1.1. Команда пересылки
- •4.1.2. Команда замены
- •4.1.3. Команды ввода и вывода
- •4.1.4. Загрузка исполнительного адреса
- •4.1.5. Загрузка указателя
- •4.1.6. Пересылка флагов
- •4.1.7. Перекодировка
- •4.2. Операции со стеком
- •4.3. Передача параметров
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 более подробно.