CodeNet / Языки программирования / Ассемблер / Windows / Assembler & Win32. Курс молодого бойца
Что такое процессор
6 октября 2006 года
Чтобы нормально знать ассемблер, надо знать, что такое процессор.
Вот наиболее простая схема.
Самое главное в процессоре это регистры. Регистры состоят из триггеров. Триггер может иметь 2 значения 0 или 1. Регистры бывают 8, 16, 32 (,64) разрядные, понятно, что если 8 разрядов, то в регистре 8 триггеров. Регистр используется для промежуточного хранения информации, некоторые регистры хранят только определённую информацию. Также есть порты ввода вывода. Доступ к внешним устройствам происходит через порты ввода вывода, с помощью контроллера ввода-вывода. Не путайте порты ввода-вывода с портами LPT, COM и т.д.
Процессоры x86
Процессоры 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 кольце нельзя выполнять привилегированные команды процессора нельзя обращаться к портам ввода вывода и запускать прерывания, но об этом позже.
Вот и подошёл к концу первый урок.
Оставить комментарий
Комментарии
я бы посоветовал автору если он пишет для новичков то что бы коменнтировал что следует в первую очередь важно запомнить
для тех кто вообще никогда не программировал можно взять для изучения что- то и попроще.
Самое главное в процессоре это регистры. Регистры состоят из триггеров.--- Поясняю Регистры- это ячейки памяти в которых хранится текущая исполняемая в программе информация, то есть двоичные числа типа 011011, триггер это такая хитрая микросхема которая помнит записываемое
состояние 1 или 0, переводится как защелка используется в электронике. Регистры состоят из триггеров.-- Поясняю, то есть одно запоминаемое число один триггер,он помнит либо 0 либо 1,
в зависимости что в него засунули.
Регистры бывают 8, 16, 32 (,64) разрядные, понятно, что если 8 разрядов, то в регистре 8 триггеров.-- Поясняю количество триггеров иначе назвать разрядов бывает 8, 16, 32 (,64).
В общем не буду обижать админа. Если он разрешит то продолжу комментарий.
хрен поймешь, что к чему...