Адресация данных бывает прямая (всегда в постоянное место памяти) и КОСВЕННАЯ, для доступа по ВЫЧИСЛЯЕМОМУ адресу.
Пример применения косвенной адресации
КОСВЕННАЯ АДРЕСАЦИЯ
Позволяет В РАЗНОЕ ВРЕМЯ АДРЕСОВАТЬСЯ К РАЗНЫМ местам ОДНИМ И ТЕМ ЖЕ ОПЕРАТОРОМ.
Но нужно применять регистры – указатели (BX, BP, SI и DI).
Используется сумма «базы» (значение BX или BP), «индекса» (значение SI или DI), и «смещения» (константа или метка ).
Каждое из этих слагаемых НЕОБЯЗАТЕЛЬНО.
ПРИМЕРЫ:
[смещение] [bp+смещение]
[bx] [bx+смещение]
[si] [si+смещение]
[di] [di+смещение]
[bx+si] [bx+si+смещение]
[bx+di] [bx+di+смещение]
[bp+si] [bp+si+смещение]
[bp+di] [bp+di+смещение]
ЗАПИСЬ ТИПА [bp+si+смещение] И ЗАПИСЬ [bp][di][смещение] ЭКВИВАЛЕНТНЫ!
;------------подпрограмма вывода ASCIIZ-строки
; dx - метка строки
Outstr0 proc
pusha
mov si, dx
@:
mov dl, [si]
cmp dl, 0
je _out
mov ah, 2
int 21h
inc si
jmp @
_out:
popa
ret
endp
ИТОГИ РАЗДЕЛА
1. Ассемблер – строчный язык. Один оператор занимает одну строку.
2. Содержимым сегмента кода являются предложения четырёх типов: 1-КОМАНД, 2-МАКРОКОМАНД, 3-ДИРЕКТИВ и 4-КОММЕНТАРИЕВ.
3. Команды ассемблера превращаются компилятором в машинный код, а директивы – нет. Директивы управляют работой компилятора.
4. Выражения, состоящие из операндов и операций, вычисляются при компиляции (!) TASMом, поэтому должны сводиться к константе
5. TASM поддерживает простые (скалярные) типы данных (целые числа разной разрядности – 8,16 и 32 бита)и сложные типы данных (записи). Сложные типы строятся из простых примерно как record в Паскале..
7. Для косвенной адресации используются только регистры BX, BP, SI и DI, потому что процессор способен только их значения использовать как УКАЗАТЕЛИ.
Раздел 06. СТРУКТУРА КОМАНД АССЕМБЛЕРА
И ИХ ФУНКЦИОНАЛЬНАЯ КЛАССИФИКАЦИЯ
ПЛАН РАЗДЕЛА
1. Структура команды ассемблера.
2. Структура машинного кода команды.
3. Типы операндов команды и их согласованность по разрядности.
4. Функциональная классификация машинных команд
СТРУКТУРА КОМАНДЫ АССЕМБЛЕРА
Синтаксическая диаграмма. Команда ::=
ПРИМЕР: | M45: mov ax,@data mov ds,ax mov ah,09h CLD ; очистить флаг DF mov dx,offset message int 21h std mov ax,4c00h int 21h |
СТРУКТУРА МАШИННОГО КОДА КОМАНДЫ
УСЛОВНЫЕ ОБОЗНАЧЕНИЯ ТИПОВ ОПЕРАНДОВ
Для представления операндов в синтаксических диаграммах используются следующие обозначения:
r8, r16, r32 — операнд в одном из регистров размером байт, слово или двойное слово;
m8, m16, m32, m48 — операнд в памяти размером байт, слово, двойное слово или 48 бит;
i8, i16, i32 — непосредственный операнд размером байт, слово или двойное слово;
a8, a16, a32 — относительный адрес (смещение) в сегменте кода.
Какие операнды в какой ситуации применены. |
СОГЛАСОВАННОСТЬ ОПЕРАНДОВ ПО РАЗРЯДНОСТИ
Допустимы следующие сочетания:
"r8, m8",
"r16, m16",
"r32, m32".
Например, сочетание "r8, m16" недопустимо.
КЛАССИФИКАЦИЯ КОМАНД
ИТОГИ РАЗДЕЛА