Андрей Газибаров


без тайни

Увод

Тази книга е предназначена за програмисти с опит, които искат да навлязат по-надълбоко в тайните на най-разпространената в днешно време процесорна архитектура I80x86/87. Книгата представлява справочник на инструкциите, регистрите, структурите от данни и системните възможности на всички процесори като цяло. Във фокуса на разглежданията са „новите“ процесори I80386, I80486 и фамилиите Pentium. Разбира се, „старите“ процесори I8088/86 и I80186 също не са забравени: все пак, ако фамилиите Pentium са върхът, то I8086 и I80186 са основата. Между двете групи стои I80286 – това е един преходен процесор, който запазва всички черти на „старите“, но въвежда и нещо принципно ново, доразвито в „новите“ процесори: т.нар. защитен или виртуален режим, който се характеризира с увеличен обем физически адресируема памет и хардуерно реализирани средства за защита на кода на различните приложения едно от друго и от операционната система.
Към „старите“ процесори е добавен още микропроцесорът V20, произвеждан от японската фирма NEC. Тези процесори са хардуерно съвместими с I8086, а програмно – с I80186. Но те са уникални и с това, че предлагат няколко инструкции, които не са реализирани в процесорите на Intel, най-интересни измежду които са инструкциите за работа с двоично-десетични числа направо в паметта и префиксите REPC и REPNC. Всички уникални инструкции на V20 са включени в описанието.
Тази книга представлява компилация на различни източници на информация за фамилията процесори I80x86 и обобщение на опита, придобит от автора – програмист със силно системна ориентация. Смятам, че тя ще бъде полезна за всички, които желаят да слязат на по-ниско ниво от обикновеното приложно програмиране (светът не се състои само бази данни, хора!). Част от информацията е придобита вследствие на случайно възникнала ситуация, довела до въпроса „Това пък какво е?“. Така бяха открити всички инструкции на V20, недокументираните форми на AAM и AAD, действието на кода D6, наречен от мен, може би не съвсем сполучливо, SETALC.
Процесорите на Intel са разгледани последователно – архитектура, режими на работа, инструкции.
Към книгата са добавени програмни фрагменти, които са кратки, удобни и вършат доста полезна работа или дават хубави идеи за решение на често срещани задачи. Голяма част от тези фрагменти са „измислени“ от мен.
Най-голямата непълнота в информацията в тази книга е във връзка с наблюдаване и оценяване на производителността при процесор Pentium 4. Механизмите за това са силно усложнени в сравнение с предишните поколения Pentium процесори и са неясно описани дори в официалната документация на Intel

История на книгата

Началото на книгата е поставено още през 1992 г. Тогава бях ученик в X-ти клас от най-първия випуск на училище Електронни системи. По онова време I80486 беше върхът на технологиите, 50MHz – чудо невидено, а Бил Гейтс все още не можеше да си представи за какво биха му били на човек повече от 640К оперативна памет.
Основата беше поставена с пълен справочник на инструкциите на I8086. Малко по-късно бяха добавени инструкциите на I80186, а след щателно изследване - и екзотичните инструкции на процесора V20, на който бяха базирани компютрите, с които работехме тогава. Увлечението ми по най-ниското ниво на програмиране датира от значително по-рано.
След като справочникът на инструкциите беше готов, стана очевидно, че трябва да се опишат и всички системни особености на процесора – адресиране, сегментация, структури данни, формати на регистри и т.н.
Постепенно се запознах и с другите процесори на Intel – 286, 386, 486 – и естествено ги включих в книгата. Техните режими на работа предизвикаха появата на много нови глави. С появата на фамилиите Pentium и техните многобройни функции броят на главите постоянно нарастваше. Днес книгата се състои от 16 глави и около 500 страници (А4).
Нашироко са използвани илюстрации за онагледяване на много функции на процесорите и таблици за систематизиране на голямата по обем фактология. Програмните фрагменти се появяваха или като илюстрация на описваните функции, или като част от някои мои програмистки находки.

Днес не е трудно цялата тази информация да се намери свободно в Интернет: официалната документация на IA4, IA8, IA32, IA64, x86-64 и на AMD 3DNow! се състои от общо 18 книги с общ обем 5000 страници. Но в „80х86: без тайни“ тези 5000 страници са синтезирани на едно място в 500 на български език.
Опитах да публикувам книгата. Най-голямото издателство на компютърна литература, СофтПрес, ми отказа с аргумента, че не можели да продадат книга от български автор. Унизително е, но изглежда истина. Ние сме удивителни нихилисти на тема собствени способности. Предложих книгата да бъде издадено под името на Андреас Крийкуейдър, но и това не помогна.
Както е да, Интернет не пита за националността на автора.

Съдържание и резюме на текста

Текстът на книгата е разделен на шестнайсет глави.

Част I. Въведение

Разглежда основните характеристики на процесорните системи като цяло. Тази глава не е свързана с фамилията I80x86, а с теорията на процесорната техника (ориентирана към системния програмист). Включени са основните концепции за изграждане на процесорна система, нейните компоненти и ресурси. Разгледани са много теми, отговор на въпроса Що е то..., които знаещите приемат са даденост, а незнаещите много трудно успяват да осмислят.

Част II. Базова архитектура

Представя фамилията I80x86 и архитектурата х86. Тук са описани пълно всички архитектурни особености на фамилията като цяло и на отделни нейни представители. Дадено е пълно описание на приложните и системните регистри (т.е. тези, които имат отношение към приложното и системното програмиране и не попадат в категорията „специални ресурси“).
Добавена е кратка емоционална статия, наречена Ода за паметта, в която се описва как масово разпространените потребителски операционни системи използваха най-мощната процесорна фамилия по подобие на парен чук за просто убийство на муха и какви са икономическите предпоставки за това.

Част III. Реален режим на работа
Част IV. Защитен режим на работа
Част V. Режим V86
Част VI. Режим на управление на системата

Тези четири глави са посветени на четирите режима на работа на процесорите от фамилията I80х86. Описани са подробно особеностите на всеки режим – адресиране на паметта, принципи за защита, влизане и излизане от режима. Различните видове таблици, разполагани в паметта и изисквани от процесора за нормалната му работа, са пълно описани в съответната глава. Глава IV съдържа и кратко есе на тема защо и кому е нужна защита.
Споменат е режимът на емулация на I8080, поддържан от процесора V20.

Част VII. Многозадачност

Описва принципите и структурите данни, на които се базират хардуерните средства за организиране на многозадачност.

Част VIII. Изчисления с плаваща запетая

Главата е посветена на изчисленията с плаваща запетая. До I80486 тези средства са реализирани чрез отделен процесор (фамилията I80х87); в 486 те са вече вградени в главния процесор. Главата описва както теоретичните основи на изчисленията с плаваща запетая, така и реализацията им в процесорите на Intel. Спомената е математическата на наука Числени методи и чрез три красноречиви примера е илюстрирана необходимостта от нейното съществуване и развитие.
В края на глава е добавено описание на софтуерния емулатор за I80х87 в реален режим, реализиран съвместно от Borland и Microsoft и вграждан като стандартен модул към компилираните от техни продукти 16-битови програми за DOS.

Част IX. Много данни – една инструкция

Главата е посветена на модерната технология MMX. Тя дава възможност за обработка на множество данни с една-единствена инструкция, което позволява да се увеличи производителността на процесора от два до шестнайсет пъти. Показани са етапите на развитие на технологията – MMX, SSE, SSE2, както и нейния аналог на AMD 3DNow!.

Част X. 64-битови архитектури

Очевидно е, че сегашните 32-битови архитектури не са върхът на развитието на изчислителната техника. Вече десетилетие съществуват 64-битови платформи. Причините те да не могат да се наложат масово в практиката, са коментирани още в раздел 1.4. Intel и AMD са възприели коренно различен подход. Подходът на AMD е аналогичен на начина, по който I80386 разширява IA-16 до IA-32. Новата архитектура е наречена x86-64 и понеже е надстройка на стандартната х86 архитектура, тя е съвместима с нея. Затова, тази нова архитектура е описана пълно в тази глава. Обратно, Intel са създали качествено нова архитектура, която е напълно несъвместима с IA-32. Съвместимостта е постигната, като IA-32 е реализирана като паралелен набор на стандартната IA-64. Поради тази причина IA-64 е само спомената в книгата.

Част XI. Моделно-специфични регистри

Тази глава е първата от четирите, посветени на специализираните функции, предлагани от фамилията I80х86.
С Pentium Intel възприемат унифициран подход за въвеждане на нови функции и свързаните с тях управляващи регистри: моделно-специфичните регистри. Глава XI е кратка е съдържа само списък на част от моделно-специфичните регистри, описани в книгата.

Част XII. Кеш памет

При бърз процесор и бавна основна памет, кеш паметта е незаменимото средство за постигане на максимална производителност от процесора. Необходимостта от кеш памет е коментирана още в раздел 1.1. като част от общата архитектура на процесорните системи. Тук са разгледани средставата за контрол на кеш паметта и процеса на кеширане на данни, реализирани от различните представители на фамилията I80x86.

Част XIII. Настройка

Заедно със средствата за защита, средствата за настройка са жизнено необходими за изчистване на софтуера от програмни грешни. Цялата фамилия предлага мощни средства за трасиране и настройка на програми. Тези средства се усъвършенстват с всеки нов представител на фамилията.
В същата глава са разгледани и средствата за оценка на производителността на системата. Те дават възможност програмите да се опитимизират за получаване на максимална производителност.

Част XIV. Специални ресурси

Тази глава е посветена на всички останали функции, които не влизат в предишните глави. Това са средствата за температурен контрол, актуализиране на микрокода на процесора, контрол на шинния интерфейс с цел откриване на хардуерни сривове и на вградения локален контролер на прекъсвания.

Част XV. Инициализация и идентификация

Главата описва действията, които процесорът автоматично предприема при начално установяване и състоянието в момента на започване на първата инструкция. Показана е минимално необходимата инициализация за превключване на процесора в защитен режим.
По-голямата част от главата е посветена на мощната информационна инструкция CPUID.

Част XVI. Инструкции

Тази глава заема една трета от цялата книга. Представлява справочник на всички инструкции, изпълнявани от процесорите на фамилията I80x86. За всяка инструкция са дадени в детайли изпълнението ѝ, влиянието върху флаговете на процесора, възможни изключения, особености на изпълнението при отделните процесори и в архитектурата х86-64. Включени са екзотичните инструкции на процесора V20, вкл. BRKEM, и инструкцията JMPE на IA-64. Обратните на BRKEM и JMPE инструкции също са споменати.

Приложения

Тук са дадени накратко:
  • по-ранните процесори на Intel I4004, I4040, I8080 и I8085
  • описание на три контролера от дънната платка на компютъра IBM PC/XT (директен достъп до паметта, прекъсвания, таймери) които все още могат да се управляват софтуерно по идентичен начин
  • някои програмни фрагменти, които считам за полезни (или хитри) и които не са намерили място в текста на книгата
  • карти на инструкциите

    Речник

    Това е кратък четириезичен речник на термини, широко използвани в този вид литература. Езиците са български, руски, английски и японски. В бъдеще вероятно ще добавя и немски. Японските термини са дадени с тяхното йероглифично написание, придружено с фонетична транскипция с фуригана (да ме прощават непознаващите японската кана, но считам използването на латиница при наличието на такава добра собственояпонска фонетична писменост за неуместно). За някои термини е дадена любопитна етимология (като например вица за онзи комар, който със смъртта си дал началото на думата bug в смисъл на програмна грешка и който всъщност не е верен).
  • Съдържание и пълен текст

    Пълният текст на книгата се състои от един документ (PDF формат, 3.6 M). Добавен е пълният изходен текст на програмата PROTEJ с коментари на английски език. Програмата съдържа цялостно ядро работещо в защитен режим и илюстрира повечето му характеристики, вкл. работа с пълен 48-битов указател, изходи и превключване на стековете.
     
    Съдържание Пълен текст
     
      PDF, 3.6M Приложение, 18К