1.1.2     Регістри

Мікропроцесор 8086/88 має велику кількість двобайтових внутрішніх регістрів, кожному з яких присвоєно “ім’я”, чи мнемоніка. Всі регістри умовно можна розбити на три групи:

Ä       регістри загального призначення – AX, BX, CX, DX;

Ä       регістри – покажчики – DI, SI, BP, SP, IP;

Ä       сегментні регістри – CS, DS, ES, SS.

Регістри загального призначення (РЗП) дозволяють звертатися до цілого слова в регістрі (мнемоніки AX, BX, CX, DX) чи до окремих байтів (мнемоніки AH, BH, CH, DH – до старшого байту, мнемоніки AL, BL, CL, DL –до молодшого байту). Вони використовуються для проміжного зберігання операндів. Так як доступ до регістру проходить у декілька разів скоріше, ніж до комірки оперативної пам’яті, розміщення проміжних результатів в регістрах, в тому числі і в (РЗП), дає значний виграш у швидкості виконання програми.

Регістри покажчики допускають доступ тільки до цілого слова в регістрі. Регістр IP (Instruction Pointer) у парі з регістром CS (CS:IP) задає фізичну адресу в пам’яті наступної машинної команди. Значення IP змінюється тільки командами умовного та безумовного переходів, циклу, звертання до процедур і при виконані переривань (див. 1.3). Регістри SI та DI використовуються апаратурою мікропроцесора в деяких машинних командах – так званих ланцюгових примітивах. При виконанні таких команд (пересилання групи байтів чи слів, порівняння групи байтів чи слів і т.д.) фізична адреса джерела задається значенням DS:SI, а фізична адреса призначення – ES:DI. Після обробки чергового байту процесор автоматично модифікує значення регістрів DI та SI. Звідси і мнемоніки даних регістрів: DI (Destination Index – індекс призначення), SI (Source Index – індекс джерела). Оскільки ці команди досить рідкісні, багато компіляторів, в тому числі і компілятор Turbo C, використовують DI та SI для зберігання регістрових змінних. Регістр SP у парі з регістром SS задає фізичну адресу поточної вершини стеку. Запис в стек виконується або спеціальними інструкціями PUSH, або мікропроцесор записує туди адресу точки повернення, виконуючи інструкції виклику процедур (поточне значення SC та IP для FAR – переходів чи тільки IP для NEAR – переходів) і переривання. При кожному запису слова в стек значення SP апаратно зменшується на 2, а при кожному читанні слова із стеку – збільшується на 2. Завдяки цьому говорять, що стек “росте” зверху вниз (від більших адрес до менших, а дисципліну роботи стеку як буфера називають LIFO (Last In, First Out – “останній прийшов, першим пішов”). Регістр BP являється покажчиком, який зв’язаний зазвичай із сегментом стека. Якщо в машинній команді операнд задається посиланням на BP, то фізична адреса операнда в пам’яті формується з використанням SS.