Программирование на Ассемблере


Регистровая память.


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

Регистры делятся на

регистры общего назначения (РОН);

сегментные регистры (СР).

управляющие регистры (УР);

отладочные регистры (ОР)

РОН предназначены  для хранения исходных данных для некоторых команд (например, для команды деления содержат делимое), для хранения результатов (команда умножения формирует произведение), исходных и промежуточных данных для команд, в которых одно значение должно быть в регистре (команды пересылки, арифметические команды, …), а также используются для доступа к элементам массивов. Напоминаем о наличии внутренних регистров для каждого общего регистра. Используется 8 РОН, каждый регистр длиной 4 байта. Все регистры можно использовать как целиком, так и их части. Ниже представлены все возможные варианты использования регистра EAX:



AH (1 байт)

AL(1 байт)

AX(2 байта)

EAX(4 байта)

Аналогично используются регистры EBX, ECX, EDX.

Для регистров ESI, EDI, ESP, EBP применяется 2 варианта – целиком весь регистр длиной 4 байта, или его младшие 2 байта (SI, DI, SP, BP). Рекомендуем выписать все возможные регистры на Вашу «Шпаргалку»!

EAX (AX (AL, AH));

EBX (BX (BL, BH));

ECX (CX (CL, CH));

EDX (DX (DL, DH));

ESI (SI);

EDI (DI);

ESP (SP);

EBP (BP).

Буква L в обозначении регистра соответствует младшему байту (LOW), а буква H – старшему (HIGH).

CР предназначены для определения адресов.  Механизм вычисления адреса зависит от режима работы. При программировании в 32-битном режиме для FLAT модели в явном виде не используются. Более подробно сегментные регистры рассмотрены в 3.4.1

УР предназначены для управления разветвлениями (регистр флагов), управления режимами работы процессора(CR0, CR1, …).

Отладочные регистры (DR0, DR1, …) используются для отладки программ.

Используются 2 режима работы процессора: реальный и защищенный. Реальный режим включается автоматически по нажатии клавиши RESET или включении питания. Однозадачный режим. Для задания адреса памяти используется выражение:

(Сегментный регистр * 16) + смещение,

где содержимое сегментного регистра и смещение – 16 битные числа. Диапазон изменения адреса 0..0xffff*0x10 + 0xffff, т.е. немного более одного мегабайта. Защищенный режим будет рассмотрен ниже.

Для работы FPU используются выделенные регистры (ST0, ST1,… ST7), для которых применяется стековая организация.

Для работы блока MMX используются регистры MM0..MM7. Для процессоров PENTIUM и PENTIUM П регистры FPU и    MMX фактически используют один и тот же модуль, поэтому одновременно нельзя использовать команды MMX и FPU. Для PENTIUM Ш это ограничение снято.



Содержание раздела