Процессоры x86 бывают 8086, 80186,
80286, 80386, 80486, 80586 и т.д. дальше до предела человеческого прогресса.
Процессоры 8086-80286 16-ти разрядные, дальше идут 32 разрядные. Я вам буду
рассказывать о процессоре 80386, остальные не слишком сильно отличаются друг от
друга.
Регистры общего назначения - EAX, EBX, ECX,
EDX 32 битные регистры младшая часть которых называется AX, BX, CX, DX они 16
битные, каждый регистр делится на 2 части: младшие AL, BL, CL, DL, старшие AH,
BH, CH, DH Регистры общего назначения используются для операций с данными,
такими, как сравнение, математические операции или запись данных в память.
Регистр СХ(ECX) чаще всего используется как счетчик в циклах.
Регистры сегментов - это CS, DS, ES, FS, GS, SS.
Эти регистры 16-ти битные, и содержат в себе первую половину адреса
"оффсет:сегмент". Адреса я вам поясню в следующем уроке. Регистры оффсета - EIP,
ESP, EBP, ESI, EDI. Эти регистры 32-х битные, нижняя половина которых доступна
как регистры IP, SP, BP, SI, DI. EIP - указатель команд, и содержит указатель на
линию кода, которая будет исполняться следующей. То есть полный адрес на
следующую исполняемую линию кода будет CS:IP (CS:EIP).
Регистр ESP указывает на адрес вершины стека.
Регистр ЕВР содержит адрес, начиная с которого в стек вносится или забирается
информация (или "глубина" стека). Параметры функций имеют положительный сдвиг
относительно ЕВР, локальные переменные - отрицательный сдвиг, а полный адрес
этого участка памяти будет SS:EBP. Регистр ESI - адрес источника, и содержит
адрес начала блока информации для операции "переместить блок" (полный адрес
DS:SI), а регистр EDI- адрес назначения в этой операции (полный адрес ES:EDI). А
кое-что забыл, я не объяснил вам, что такое стек. Представьте, что одна
подпрограмма вызывает другую, вызываемая подпрограмма завершила свое выполнение,
теперь ей надо передать управление подпрограмме, которая её вызвала, как раз
адрес следующей команды после вызова подпрограммы находится на верхушке стека.
Стек как магазин автомата засунули
адрес, засунули второй, засунули третий, и достают адреса в порядке обратном
засовыванию, сначала третий, второй, первый. Следовательно, подпрограмма, может
вызвать ещё одну подпрограмму, а она в свою очередь ещё одну и так, сколько
хочешь, всё ограничивается только размером стека. Со стеком
разобрались.
Процессор 80386+ (плюс обозначает, что
и все остальные процессоры) может работать в 2х режимах: обычный и защищённый. В
защищённом режиме доступны 32 разрядные инструкции и регистры. Win32 работает на
процессорах 80386+ в защищённом режиме. DOS работает в обычном режиме. В ДОС нет
32 битных регистров. Вот ещё одно преимущество
Win32.
Для того чтобы узнать результат предыдущей
операции, существует регистр флагов. Он 16 битный. Каждый бит в нём обозначает
некоторый флаг. В регистре флагов есть флаги переполнения, отрицательного
результата, положительного результата, запрета прерываний, чётности, переноса и
т.д.
Также процессоры 386+, существует поддержка
многозадачности, реализована система колец защиты: их 4. Самое привилегированное
0 кольцо в нем, что хочешь, то и делаешь. 3 кольцо защиты наиболее ограниченное.
В win32 существует только 0 и 3 кольцо защиты. В 3 кольце нельзя выполнять
привилегированные команды процессора нельзя обращаться к портам ввода вывода и
запускать прерывания, но об этом позже.