
- •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.3. Регистры адресации
В процессоре 8088 имеется четыре 16-битовых регистров, которые могут принимать участие в адресации операндов. Один из них является одновременно регистром общего назначения - регистр базы BX. Другие три - это указатель базы (Base Poiner- BP), индекс источника (Source Index -SI) и индекс назначения (DestinationIndex - DI). Программа может использовать регистры BP, SIи DI в качестве 16-битовых операндов, но отдельные байты в них недоступны. Основное назначение этих регистров - поставлять 16-битовые значения, используемые в формировании адресов операндов.
Microsoft (R) Macro Assembler Version 5.00 11/17/88 21:42:25
Фиг 3.2 Адресация операндов Page 1-1
PAGE ,132
TITLE Фиг 3.2 Адресация операндов
0000 CODE SEGMENT
ASSUME CS:CODE,DS:CODE,SS:CODE
0123 ORG 123H
0123 ???? OPND DW ?
0200 ORG 200H
0200 43 INC BX ;Увеличение регистра
0201 FF 06 0123 R INC OPND ;Увеличение ячейки памяти
0205 FF 07 INC WORD PTR [BX] ;Увеличение слова памяти
0207 FF 87 0123 R INC [OPND+BX] ;Смещение плюс индекс
020B FF 84 0123 R INC [OPND+SI]
020F FF 84 0123 R INC OPND[SI] ;Другой способ - тот же результат
0213 FF 85 0123 R INC OPND + [DI]
0217 FF 86 0123 R INC [OPND] + [BP]
021B FF 00 INC WORD PTR [BX+SI] ;База плюс индекс
021D FF 03 INC WORD PTR [BP]+[DI]
021F FF 81 0123 R INC [OPND+BX+DI] ;База + индекс + смещение
0223 FF 82 0123 R INC OPND[BP][SI]
0227 CODE ENDS
END
Фиг 3.2 Адресация операндов
Каждая команда в 8088 задает для выполнения некоторую операцию. Разные операции могут иметь от нуля до двух операндов. Например, команде разрешения прерываний Set Interrupt (STI) операнды не нужны. Команда увеличения (INC) требует, чтобы программист определил один операнд, - регистр или ячейку памяти, - который должен быть увеличенна еденицу. Команда ADD (сложение) должна иметь два операнда - складываемые величины. Некоторые команды неявно задают расположение операнда, но большинство команд позволяют программисту выбирать в качестве операнда регистр или ячейку памяти. Если в качестве операнда выбран регистр, топрограммисту остается только указать его имя. Для указания же в качестве операнда участка памяти у вас есть много различных способов. Хорошим примером служит команда INC. Она имеет единственный операнд. На Фиг. 3.2 изображен листинг ассемблерас несколькими различными вариантами команды INC. Первая команда INC называет в качестве операнда регистр BX. Заметим, что в поле операндов в этом случае кроме BX ничего нет. Остальные команды в примере указывают в качестве операнда ячеку памяти. И хотя в них иногда появляется имя регистра BX,он не является здесь самим операндом, а используется для определения его адреса.