Win32asm обучение


Урок 3 - Основы ассемблера - часть 2


/p>

Давайте исследуем вышеприведенный код:

Mov команда может перемещать значение от регистра, памяти или непосредственного значения к другому регистру. В примере выше, eax содержит 12345678h. Затем значение регистра ах (3-ий байт слева в регистре eax) копируется в регистр cl (самый младший байт регистра ecx). Далее, из регистра cl вычитается 10, и затем значение из регистра cl копируется в регистр al(самый младший байт регистра eax).

Есть различные типы регистров:

Универсальные

Эти 32-битные (и 16/8 для их компонентов) регистры могут использоваться для чего угодно:

eax (ax/ah/al) Аккумулятор
ebx (bx/bh/bl) Базовый регистр
ecx (cx/ch/cl) регистр-счетчик
edx (dx/dh/dl) регистр данных

Хотя они и имеют названия, вы можете использовать их как угодно.

Сегментные регистры

Сегментные регистры определяют сегмент памяти, которая используется. Вероятнее всего, они вам не понадобятся в win32asm, потому, что windows использует плоскую систему памяти. В dos, память разделена на сегменты по 64kb, так, что если вы хотите определить адрес памяти, вы определяете сегмент и смещение (например 0172:0500 (сегмент:смещение)). В windows, сегменты имеют размер 4Gb, так, что в сегментации в win. Сегментные регистры всегда - 16-битные.

CS Сегмент кода
DS Сегмент данных
SS Сегмент стека
ES Дополнительный сегмент
FS (только с 286+) Универсальный сегмент
GS (только с 386+) Универсальный сегмент

Регистры указателя

Фактически, вы можете использовать регистры указателя, как универсальные регистры (eip - исключение), пока вы сохраняете их первоначальные значения. Регистры указателя называются так потому, что их часто используют для сохранения адресов памяти. Некоторые опкоды (movb,scasb, и т.д.) также их используют.

esi (si) Индекс источника
edi (di) Индекс приемника
eip (ip) Указатель команды

Регистр EIP (или IP в 16-разрядных программах) содержит указатель на команду, которую собирается выполнить процессор. Так что вы не можете использовать регистр eip как универсальный.

Регистры указателя стека

Есть 2 стековых регистра: esp & ebp. Esp содержит текущую позицию стека в памяти (подробнее об этом в следующих уроках). Ebp используется в функциях как указатель на локальные переменные.

esp (sp) Указатель стека
ebp (bp) Указатель базы кадра стека

[наверх]




- Начало -  - Назад -  - Вперед -



Книжный магазин