Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



Assembler&Win32. Курс молодого бойца. Урок 1.

Что такое процессор

    Чтобы нормально знать ассемблер, надо знать, что такое процессор. Вот наиболее простая схема.

Простая схема процессора

    Самое главное в процессоре это регистры. Регистры состоят из триггеров. Триггер может иметь 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 кольце нельзя выполнять привилегированные команды процессора нельзя обращаться к портам ввода вывода и запускать прерывания, но об этом позже.