- •3.Программирование на языке ассемблера
- •3.1. Архитектура микропроцессоров k1810вм86/k1810вм88
- •3.2. Основные элементы ассемблера. Формат программной строки
- •3.3. Директивы управления сегментами
- •3.4. Типовая структура текста программы
- •3.5. Символические имена
- •3.6. Константы. Их типы и директивы описания
- •3.6.1. Числовые константы
- •3.6.2. Символьные константы
- •3.6.3. Поименованные константы
- •3.6.4. Константы-выражения
- •3.7. Переменные. Их типы и директивы описания
- •3.7.1. Стандартные типы данных и их размещение в памяти
- •3.7.2. Директивы описания переменных и распределения памяти
- •3.8. Атрибуты переменных и меток. Директивы, возвращающие атрибутные значения
- •3.8.1. Атрибуты переменных
- •3.8.2. Атрибуты меток
- •3.9. Замена атрибутов переменных и меток
- •3.9.1. Замена смещения
- •3.9.2. Замена сегмента
- •3.9.3. Замена типа
- •3.10. Способы адресации операндов
- •3.10.1. Адресация данных
- •Регистровая адресация
- •Непосредственная адресация
- •Прямая адресация
- •Косвенная регистровая адресация
- •Базовая адресация
- •Индексная адресация
- •Базово-индексная адресация
- •Относительная базовоиндексная адресация
- •3.10.2. Адресация переходов
- •Внутрисегментный прямой переход
- •Внутрисегментный косвенный переход
- •Межсегментный прямой переход
- •Межсегментный косвенный переход
- •3.11. Система команд
Базовая адресация
Источником базового адреса могут служить только базовые регистры BREG (BX,BP). В этом случае операнд может записываться в следующем виде:
[BREG][Const] или [BREG]+Const или [BREG+Const].
Во всех случаях смещение disp=Const, и эффективный адрес EA=(BREG)+disp.
Пример 3.35:
MOV AX, [BP][10] ; Загрузка из стека 6-го
MOV AX, [BP+10] ; слова области, адресуемой BP.
MOV [BX]+Temp, AL ; Запись (AL) в байт Temp
; области, адресуемой BX.
При этом имя Temp должно быть определено как константа.
Базовая адресация используется в тех случаях, когда номер элемента, к которому осуществляется обращение, известен на этапе разработки программы, а базовый (начальный) адрес области данных вычисляется при ее выполнении.
Индексная адресация
Источником индексного адреса могут служить только индексные регистры IREG (SI,DI). В этом случае операнд может записываться в следующем виде:
1) NameVar[IREG] ; disp=offset NameVar
2) NameVar[IREG+Const] ; disp=offset NameVar+Const.
При этом эффективный адрес EA=disp+(IREG).
Пример 3.36:
MOV Array[SI], AX ; Запись AX в текущий элемент массива ; Array
MOV DX, Array[DI10] ; Загрузка DX элементом массива Array,
; отстоящим от элемента, адресуемого DI, ; на 10 байтов.
Индексная адресация используется для обращения к элементам одномерных поименованных массивов в тех случаях, когда имя массива известно на этапе разработки программы, а номер элемента, к которому осуществляется обращение, вычисляется при выполнении программы.
По существу базовая и индексная адресация в МП ВМ86/ВМ88 аналогичны. Это обусловлено тем, что и базовые, и индексные регистры имеют одинаковую длину в 16 бит. При таком рассмотрении оба эти способа адресации считаются одним способом, называемым регистровой относительной адресацией.
Базово-индексная адресация
В этом случае операнд записывается в следующем виде:
[BREG][IREG] или [BREG+IREG].
При этом эффективный адрес EA=(BREG)+(IREG).
Пример 3.37:
MOV AX, [BX][SI] ;Загрузка в AX элемента двумерного
MOV AX, [BX+SI] ;массива с координатами (BX),(SI)
Базовоиндексная адресация является гибким режимом адресации, так как позволяет вычислять и варьировать два компонента адреса. Это может использоваться при обращении к элементам двумерных массивов.
Относительная базовоиндексная адресация
Этот способ является наиболее сложным способом адресации. Операнд может записываться в следующем виде:
1) NameVar[BREG][IREG] ; disp=offset NameVar
2) [BREG][Const][IREG] ; disp=Const
3) [BREG][IREG][Const] ; disp=Const
4) [BREG+Const1][IREG+Const2] ; disp=Const1+Const2
При этом эффективный адрес EA=(BREG)+(IREG)+disp.
Пример 3.38:
MOV Array[BX][SI], AX ; Запись (AX) в текущий элемент
; двумерного массива Array MOV [BX][1020][DI],AL ; Запись (AL) в текущий элемент
; 10-ой строки двумерного
; массива с косвенным именем MOV [BX][SI][10], AL ; Запись (AL) в 10-ый элемент
; текущей строки двумерного
; массива с косвенным именем
Относительная базовоиндексная адресация используется для обращения к элементам двумерных массивов с какимлибо одним фиксированным параметром. При этом может быть зафиксировано имя массива, номер выбираемой строки или элемента в ней.