Материал: Уч_пос_АрхКомп_2017

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

DS (начальное положение), ES

Рис.3.4

Таблица 3.1. Состав основных полей префикса сегмента программы

0h

DW

Команда INT 20 ( 16-ный код: CD 20) - вызов прерывания DOS для завершения программы и возврата в DOS

2h

DW

Размер доступной для программы памяти в параграфах

0Eh

DD

Адрес обработчика прерывания по Ctrl^Break (INT 23h)

12h

DD

Адрес обработчика прерывания по критической ошибке (INT 24h)

2Ch

DW

Значение сегментного адреса среды окружения

80h

64W

DTA –буферная область данных / адрес начала командной строки программы

3.3.4. Режимы адресации памяти в архитектуре Intel х86

Большинство команд процессора Intel Х86 выполняются с аргументами, которые принято называть операндами. Операнды в программе могут задаваться следующим образом:

  • в регистрах общего назначения;

  • непосредственно в коде команды;

  • в ячейках памяти, задаваемых в команде прямо или косвенно;

  • в портах ввода-вывода.

Для указания места расположения операнда используются 8 режимов адресации, использование которых иллюстрируется в таблице 3.2.

1. Регистровая адресация

Операнды могут располагаться в любых регистрах общего назначения и сегментных регистрах. В этом случае в операторе программы (на языке ассемблера) указывается название соответствующего регистра.

2. Непосредственная адресация

Некоторые команды (пересылки, все арифметические команды, кроме деления) по­зволяют указывать один из операндов непосредственно в операторе про­граммы.

3. Прямая адресация

Если известен адрес операнда, располагающегося в памяти, можно ис­пользовать этот адрес. В реальных программах обычно для задания статических переменных используют директивы определения данных, которые позволяют ссылаться на статические пере­менные не по адресу, а по имени.

Если селектор сегмента данных находится в DS, имя сегментного регистра при прямой адресации можно не указывать, так как DS используется по умолчанию. Прямая адресация иногда называется ад­ресацией по смещению.

4. Косвенная адресация

Адрес операнда в памяти можно не указывать непосредственно, а хранить в любом регистре. До процессоров i80386 для этого можно было использовать только регистры ВХ, SI, DI и ВР, но потом эти ограничения были сняты и адрес операнда разрешили считывать также и из ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ЕВР и ESP (но не из AX, CX, DX или SP напрямую – надо исполь­зовать ЕАХ, ЕСХ, EDX, ESP соответственно или предварительно скопи­ровать смещение в ВХ, S1, DI или ВР). Как и в случае прямой адресации, DS используется по умолчанию, но не во всех случаях: если смещение берут из регистров ESP, ЕВР или ВР, то в качестве сегментного регистра используется SS. В реальном режиме можно свободно пользоваться всеми 32-битными регистрами, надо толь­ко следить, чтобы их содержимое не превышало границ 16-битного слова.

5-6. Базовая или индексная адресация.

Та­кая форма адресации используется в тех случаях, когда в регистре находится адрес начала структуры данных, а доступ надо осуществить к какому-нибудь элементу этой структуры. Другое важное применение адресации по базе со сдвигом – доступ из подпрограммы к параметрам, переданным в кадре стека, используя регистр ВР (ЕВР) в качестве базы и но­мер параметра в качестве смещения.

До процессора i80386 в качестве базового регистра можно было использовать только регистры ВХ, ВР, SI или DI и сдвиг мог быть только байтом или словом (со знаком). Начиная с процессоров i80386 и старше, можно допол­нительно использовать ЕАХ, ЕВХ, ЕСХ, EDX, ЕВР, ESP, ESI и EDI, так же как и для обычной косвенной адресации. С помощью этого метода можно организовывать доступ к одномерным массивам байт: смещение соответствует адресу начала массива, а число в регистре – индексу эле­мента массива, который надо использовать. Очевидно, что если массив состоит не из байт, а из слов, придется умножать базовый регистр на два, а если из двойных слов – на четыре. Для этого предусмотрен следующий специальный метод адресации.

7. Индексная адресация с масштабированием

Этот метод адресации полностью идентичен предыдущему, за исключе­нием того, что с его помощью можно прочитать элемент массива слов, двойных слов или учетверенных слов, просто поместив номер элемента в регистр

mov ax, [esi*2]+2

Множитель, который может быть равен 1, 2, 4 или 8, соответствует размеру элемента массива – байту, слову, двойному слову, учетверенно­му слову соответственно. Из регистров в этом варианте адресации мож­но использовать только ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ЕВР, ESP, но не SI, DI, ВР или SP, которые можно было использовать в предыдущих ва­риантах.

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

Это самая полная возможная схема адресации, в которую входят все случаи, рассмотренные ранее, как частные. Смещение может быть байтом, словом или двойным словом. Если ESP или ЕВР используются в роли базового регистра, селектор сегмента операн­да берется по умолчанию из регистра SS, во всех остальных случаях – из DS.

Таблица 3.2. Использование режимов адресации в архитектуре Intel Х86

Режим адресации

Описание в Ассемблере

Регистр сегмента (по умолчанию)

Пример использования

Код

Название

0

Регистровая

EAX/AX/AL

MOV EAX, EDX ; DEC CX

MOV AL, CH ; PUSH DS

IN AL, DX

1

Непосредственная

Данное в виде константы (номер порта ввода-вывода)

MOV AX, 1000h; ADD AL, -30h AND EAX, 0000FFFFh

OUT 21h, AL

2

Прямая

Имя (метка) сме- щения в памяти

DS

MOV BL, Mem_B1

MOV AX, OFFSET Table

3

Косвенно-регистровая

[BX], [SI],

[BP],

[DI],

[EAX] и др.

DS

SS

DS(ES)

DS

MOV AL, [SI]

MOV CX, [BP]

MOV AX, ES:[BX]

ADD EAX, [EDX]

4

Базовая

[BX] + смещение,

[BP] + смещение

DS

SS

MOV AX, CS:[BX] +4

MOV CX, PAR_TAB[BP]

5

Индексная

[SI] + смещение,

[DI] + смещение

DS

DS(ES)

CMP ‘A’, STR1[SI]

MOV AL, BYT_TAB[DI]

6

Базово-индексная

BX] [SI] + смещ.,

BX] [DI] + смещ.,

[BP] [SI] + смещ.,

[BP] [DI] + смещ.

DS

DS

SS

SS

MOV AX, ES:VALUE[BX][DI]

7

Индексная с масштабированием

[ERg* m] + смещ.

DS

SS – для EBP,ESP

MOV CX, WORD_TAB[ESI*2]

8

Базово-индексная с масштабированием

[ERg1] [ERg2* m] + смещение

DS

SS – для EBP,ESP

MOV BX, [EDX][ECX*2] + 8

Примечания:

Базовая адресация применяется для работы со строками или записями, при этом в базовый регистр заносится начало структуры или записи, а смещение задает начало некоторого поля записи или структуры (регистр BP используется по умолчанию для доступа к параметрам процедур через кадр стека). Индексная адресация применяется для доступа к элементам однородных (обычно одномерных) массивов, смещение задает начало элемента этого массива. Базово-индексная адресация используется при работе с элементами полей записи и для работы с двумерными массивами.

3.3.5. Краткая характеристика системы команд процессоров Intel х86

Формат команды представлен в табл. 3.3.

Таблица 3.3

Префиксы

Переопределе-ние сегмента

Код операции (КОП)

Режим адресации

МИБ

Смещение

Данные

0/1/2*)/3*)

0/1

1/2*)

0/1

0/1*)

0/1/2/4*)

0/1/2/4*)

В первой строке табл. 3.3 указывается имя поля команды, во второй – длина поля в байтах. Знаком *) помечены значения длины поля, используемые, начиная с процессора i80386. Максимальная длина команды для процессора i8086 равна 6 байт.

Поле префиксов в процессоре i8086 состоит из 1 байта и может задавать префикс повторения команды, который в ассемблере обозначается как REP (повторять), REPE (повторять поравну), REPNE (повторять не поравно) или префикс LOCK – запрет доступа к шине на время выполнения команды. Более подробно префиксы поясняются в прил. 1 при описании команд строковой обработки. Начиная с процессора i80386, также добавляются однобайтовые префикс размера адреса и префикс размера операнда.

Поле переопределения сегмента используется для жесткого задания регистра сегмента, участвующего в формировании исполнительного адреса, вместо регистра, принятого по умолчанию.

Поле КОП – единственное поле, которое не может быть пустым, оно определяет код (вид) операции, которая должна быть выполнена процессором и тип обрабатываемых данных (для процессора i8086 – байт или слово). Для процессора i8086 поле является однобайтовым, а начиная с процессора i80386 – двухбайтовым.

Поле режима адресации служит для задания режима адресации, места размещения операнда: в регистре или в памяти конкретного используемого регистра.

Поле МИБ (масштаб, индекс, база) является расширением поля режима адресации, используемым начиная с процессора i80386 и задающим при формировании исполнительного адреса операнда масштабный коэффициент, индексный регистр и регистр базы.

Поле смещение содержит смещение адреса памяти при использовании прямой адресации.

Поле данные содержит значение операнда при непосредственной адресации.

Все команды процессора i8086 можно разделить на следующие группы:

  1. команды передачи данных;

  2. команды арифметических операций над целыми числами;

  3. логические команды;

  4. сдвиговые команды;

  5. команды обработки строк;

  6. команды передачи управления;

  7. команды прерываний;

  8. команды управления флагами;

  9. команды управления состоянием процессора;

  10. команды плавающей арифметики;

  11. команды мультимедийных расширений (ММХ – MultiMedia eXtension);

  12. команды потокового расширения (SSE – Streaming SIMD Extension).

3.3.6 .Арифметическая обработка чисел с использованием математического сопроцессора

Арифметическая обработка числовых данных обычно выполняется с использованием математического сопроцессора (FPU – Floating Point Unit, NPR – Numeric PRocessor), который сначала выполнялся в виде отдельной микросхемы (i8087 – i80387), а начиная с процессора i80486DX встраивается в состав основного процессора. Сопроцессор называется так потому, что может работать параллельно с процессором после инициализации. Языки высокого уровня используют его непосредственно, а ассемблер порождает ESC команды.

Источник: https://studfile.net/preview/15919868/