
- •Обозначение документа
- •Содержание
- •1 Виды тестирования. Порядок разработки тестов.
- •2 Обслуживание жестких дисков
- •3 Компиляторы и интерпретаторы
- •4 Регистры общего назначения
- •5 Косвенная базовая индексная адресация со смещением
- •6 Команды обмена данными (работа со стеком)
- •7 Программирование типовых управляющих
4 Регистры общего назначения
(регистры указатели стека и базы кадра стека)
Процессоры IA32 имеют набор высокоскоростных ячеек памяти, расположенных в непосредственной близости от ядра процессора, которые называют регистрами.
Это 4 32-разрядных регистров общего назначения:
- EAX/AX/AH/AL - аккумулятор (Extended Accumulator eXtended);
- EBX/BX/BH/BL - база (Extended Base eXtended);
- ECX/CX/CH/CL - счетчик (Extended Counter eXtended);
- EDX/DX/DH/D - данные (Extended Data eXtended).
индексные 32-разрядные регистры:
- ESI/SI - индекс источника (Extended Source Index);
- EDI/DI - индекс приемника (Extended Destination Index);
32-разрядные регистры-указатели:
- EBP/BP - указатель базы (Extended Base Pointer);
- ESP/SP - указатель стека (Extended Stack Pointer);
- EIP/IP - указатель команд (Extended Instruction Pointer).
шесть 16-разрядных сегментных регистров:
- СS - сегмент кода (Code Segment);
- DS - сегмент данных (Data Segment);
- SS - сегмент стека (Stack Segment);
- ES - дополнительный сегмент (E Segment);
- FS - дополнительный сегмент (F Segment);
- GS - дополнительный сегмент (G Segment).
32-разрядный регистр флагов:
- EFLAGS/FLAGS - флаги (Extended FLAGS).
Кроме того, в процессоре IA32 присутствуют управляющие регистры CR0...CR4, регистры управления памятью GDTR, IDTR, LDTR, TR, регистры отладки DR0...DR7, регистры тестирования TR1...TR12.
Во всех современных процессорах архитектуры IA32 присутствуют регистры SIMD-расширения:
- 64-битные регистры MMX-расширения MMX0...MMX7;
- 128-битные регистры SSE-расширения XMM0...XMM7.
5 Косвенная базовая индексная адресация со смещением
При такой адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме sp/esp и bp/ebp (это специфические регистры для работы с сегментом стека). Синтаксически в команде этот режим адресации выражается заключением имени регистра в квадратные скобки [ ]. К примеру, команда mov ax, [ecx] помещает в регистр ax содержимое слова по адресу из сегмента данных со смещением, хранящимся в регистре ecx. Так как содержимое регистра легко изменить в ходе работы программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды. Это свойство очень полезно, например, для организации циклических вычислений и для работы с различными структурами данных типа таблиц или массивов.
Этот вид адресации является дополнением предыдущего и предназначен для доступа к данным с известным смещением относительно некоторого базового адреса. Этот вид адресации удобно использовать для доступа к элементам структур данных, когда смещение элементов известно заранее, на стадии разработки программы, а базовый (начальный) адрес структуры должен вычисляться динамически, на стадии выполнения программы. Модификация содержимого базового регистра позволяет обратиться к одноименным элементам различных экземпляров однотипных структур данных.
К примеру, команда mov ax, [edx+3h] пересылает в регистр ax слова из области памяти по адресу: содержимое edx + 3h.
Команда mov ax,mas [dx] пересылает в регистр ax слово по адресу: содержимое dx плюс значение идентификатора mas (не забывайте, что транслятор присваивает каждому идентификатору значение, равное смещению этого идентификатора относительно начала сегмента данных).
Этот вид адресации очень похож на косвенную базовую адресацию со смещением. Здесь также для формирования эффективного адреса используется
один из регистров общего назначения. Но индексная адресация обладает одной интересной особенностью, которая очень удобна для работы с массивами. Она связана с возможностью так называемого масштабирования содержимого индексного регистра.