Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

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

Вот и подошёл к концу первый урок.


Назад | Оглавление | Далее

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
97K
19 января 2016 года
Денис Твардовский
0 / / 19.01.2016
+1 / -3
Мне нравитсяМне не нравится
19 января 2016, 17:39:31
Скажу так я в 6 класе не отличник на 5 месте рейтинга класа но я чет нипонял нифига первую половину тож частично но вторую непонял.
2.
93K
24 марта 2014 года
Альтис Пламенный
0 / / 24.03.2014
+2 / -2
Мне нравитсяМне не нравится
24 марта 2014, 20:08:57
я хоть и новичок в програмировании но я пытаюсь изучать с++ и делфи и пока на озах сижу в этих я зыках....вот решил посмотреть что такое асемблер по первому уроку я понял одну половину и то частично а вторую половину не фига не понял
я бы посоветовал автору если он пишет для новичков то что бы коменнтировал что следует в первую очередь важно запомнить
3.
87K
11 ноября 2012 года
Vladimir Bolonkin
0 / / 11.11.2012
+7 / -1
Мне нравитсяМне не нравится
11 ноября 2012, 22:06:08
Согласен со многими здесь комментами о доходчивости написанного... Особенно работу стека он "популярно" новичкам объяснил.... :)
4.
64K
29 сентября 2010 года
Xenolg
0 / / 29.09.2010
+1 / -1
Мне нравитсяМне не нравится
30 сентября 2010, 00:13:40
intelegator

для тех кто вообще никогда не программировал можно взять для изучения что- то и попроще.
5.
61K
11 мая 2010 года
alexsandrovi
0 / / 11.05.2010
+2 / -2
Мне нравитсяМне не нравится
11 мая 2010, 21:54:48
Ребята штука грамотная но для тех кто знает дело. На заре своей юности я это проходил. Спасибо админу он все четко напомнил, если это изучать с нуля то понадобится страниц 20, а так все лаконично.Возьму на себя смелость, да простит меня админ и немного расшифрую начало.

Самое главное в процессоре это регистры. Регистры состоят из триггеров.--- Поясняю Регистры- это ячейки памяти в которых хранится текущая исполняемая в программе информация, то есть двоичные числа типа 011011, триггер это такая хитрая микросхема которая помнит записываемое
состояние 1 или 0, переводится как защелка используется в электронике. Регистры состоят из триггеров.-- Поясняю, то есть одно запоминаемое число один триггер,он помнит либо 0 либо 1,
в зависимости что в него засунули.
Регистры бывают 8, 16, 32 (,64) разрядные, понятно, что если 8 разрядов, то в регистре 8 триггеров.-- Поясняю количество триггеров иначе назвать разрядов бывает 8, 16, 32 (,64).
В общем не буду обижать админа. Если он разрешит то продолжу комментарий.
6.
20K
27 июля 2006 года
Smoke_VSOP
4 / / 27.07.2006
+6 / -4
Мне нравитсяМне не нравится
22 ноября 2009, 13:28:48
абсолютно некорректный текст, с точки зрения изучения новой, можно сказать, науки новичком. когда я в 5м классе пришол на курсы С++, мы первым делом писали "Хеллоу Ворлд". откуда на экране взялась строчка текста, было ясно сразу, а смысл магических строк, типа "#include <stdio.h>", нам обясняли уже потом, чтобы не забивать неокрепшие умы сложными понятиями (фраза "директива препроцессора" чуть не взорвала мне мозг, когда я по любознательности полез в книгу). я думаю, этот принцип применим ко всем языкам. конкретно: всё изложенное на этой странице перегружает мозг техническими подробностями, не внося НИКАКОЙ ясности в процесс программирования на АСМе. ИМХО.
7.
49K
02 мая 2009 года
af75
0 / / 02.05.2009
+2 / -3
Мне нравитсяМне не нравится
2 мая 2009, 11:35:49
так понимаю, ассемблеровский код состоит из набора рагистров что ли?
8.
49K
30 апреля 2009 года
Devil_driver
0 / / 30.04.2009
+1 / -3
Мне нравитсяМне не нравится
30 апреля 2009, 15:22:57
Ассемблер мне преподают в универе, но что там опа, что тут только тут она еще глубже.
9.
49K
30 апреля 2009 года
Devil_driver
0 / / 30.04.2009
+5 / -1
Мне нравитсяМне не нравится
30 апреля 2009, 15:20:19
Ассемблер мне преподают в универе, но что там опа, что тут только тут она еще глубже.
10.
37K
27 февраля 2008 года
tipoc
0 / / 27.02.2008
+2 / -2
Мне нравитсяМне не нравится
27 февраля 2008, 00:43:03
Тока вместо "оффсет:сегмент" должно быть "сегмент:оффсет"
11.
26K
29 августа 2007 года
Rotveiler
20 / / 29.08.2007
+0 / -4
Мне нравитсяМне не нравится
29 августа 2007, 15:53:13
А че тут непонятного? Все основное объяснено. Нужно только выучить все регистры. Да, кстати, некоторые из них имеют особое назначение в некоторых случаях, например ECX/CX используются командой LOOP в организации циклов.
12.
30K
04 июня 2007 года
intelegator
0 / / 04.06.2007
+6 / -4
Мне нравитсяМне не нравится
8 августа 2007, 11:16:32
Несомненно, для начинающего самое то, особенно для того, кто вообще никогда не программировал...
хрен поймешь, что к чему...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог