Адресация данных бывает прямая (всегда в постоянное место памяти) и КОСВЕННАЯ, для доступа по ВЫЧИСЛЯЕМОМУ адресу.

Пример применения косвенной адресации

КОСВЕННАЯ АДРЕСАЦИЯ

Позволяет В РАЗНОЕ ВРЕМЯ АДРЕСОВАТЬСЯ К РАЗНЫМ местам ОДНИМ И ТЕМ ЖЕ ОПЕРАТОРОМ.

Но нужно применять регистры – указатели (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" недопустимо.

 

КЛАССИФИКАЦИЯ КОМАНД

 

 

ИТОГИ РАЗДЕЛА