Скачиваний:
23
Добавлен:
11.05.2015
Размер:
998.91 Кб
Скачать

7.9. Относительная адресация

Относительная адресация имеет ограниченное применение, т.к. используется только в командах перехода. При использовании относительной адресации МП 8086 извлекает смещение из следующего после кода операции байта и прибавляет его к указателю команд IP. Байт смещения рассматривается как число со знаком. Следует отметить, что IP во время выполнения команды всегда указывает на первый байт следующей команды, т.е. команда перехода с нулевым смещением не задает какого либо изменения порядка выполнения команд.

Рассмотрим пример:

-a 100

159B:0100 jmp 122

159B:0102

-r

AX=80D8 BX=0040 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0060

DS=159B ES=159B SS=159B CS=159B IP=0100 NV UP EI PL NZ NA PO NC

159B:0100 EB20 JMP 0122

-t

AX=80D8 BX=0040 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0060

DS=159B ES=159B SS=159B CS=159B IP=0122 NV UP EI PL NZ NA PO NC

159B:0122 BF0100 MOV DI,0001

т.е. произошел переход по адресу 0100h+2h+20h=0122h. Для процессоров до 80386 в качестве смещения использовался только байт, в более поздних могут использоваться два или четыре байта.

7.10. Косвенная регистровая адресация с масштабированием

Этот метод адресации доступен только на процессорах 80386 и более поздних. Он подобен косвенной регистровой адресации, но значение регистра предварительно может быть умножено на число 2, 4 или 8:

MOV AX, [ESI*2]

Этот метод может использовать в качестве регистра-указателя только регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

7.11. Адресация по базе с индексированием и масштабированием

Этот метод, аналогично предыдущему, доступен только на процессорах 80386 и более поздних. Он подобен методу адресации по базе с индексированием, отличаясь от него лишь тем, что значение регистра индекса будет предварительно умножено на 2, 4 или 8. Таким образом, смещение операнда в сегменте будет вычислено следующим образом:

база + индекс * множитель + сдвиг

MOV AX, [EBX+ESI*4+0020]

В качестве регистра базы может быть использован любой: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, в качестве регистра индекса тоже, за исключением ESP.

8. Синтаксис ассемблера

8.1. Директивы определения данных

8.1.1. Определение переменных

Для определения переменной директива определения переменных указывает транслятору тип переменной – начальное значение и ставит в соответствие переменной метку, которая будет использоваться для обращения к переменной. Директива выглядит следующим образом:

Имя переменной d* значение ,

где d*:

db – определить байт;

dw – определить слово (2 байта);

dd – определить двойное слово;

df – определить 6 байт;

dq – определить учетверенное слово (8 байт);

dt – определить 10 байт.

«Имя переменной» — является идентификатором или меткой.

В качестве «значения» может быть задано одно или несколько чисел, символы строк в кавычках “ ”, а также знак ? и выражение dup.

Cимвольные строки

Символьная строка используется для описания данных, таких как, например, имена людей, заголовки таблиц, страниц, вывода сообщений. Символьная строка записывается в одинарных или двойных кавычках, ассемблер переводит символьные строки в код ASCII. Символьная строка определяется только директивой DB.

Числовые данные

Для описания числовых данных (арифметические значения или адреса памяти) кавычки не ставятся. Ассемблер переводит все числовые константы в 16-ричные и записывает в объектном коде справа налево.

Целые числа записываются в одной из систем счисления  шестнадцатеричной, десятичной, двоичной. Десятичные числа записываются без каких-то дополнительных символов. Шестнадцатеричные числа формируются из символов 0,1, … , 9, А, В, С, D, E, F, a, b, c, d, e, f. Для распознавания шестнадцатеричного числа его дополняют ведущим нулем и в конце ставят «h». Например, 0f10h. При записи двоичных чисел после нулей и единиц ставится латинское «b». Двоичные константы часто используются для представления битовых значений в битовых командах AND, OR, XOR.

Соседние файлы в папке Введение в вычислительную технику.