Програмна модель процесора intel 8086

Лекції з курсу "Проектування ассемблеров, компонувальник, макропроцесор"

Процесор цікавить нас, перш за все, як набір регістрів.

Крім осередків оперативної пам'яті для зберігання даних (правда, короткочасного) можна використовувати і регістри - комірки, розташовані в центральному процесорі і доступні з машинних програм. Доступ до регістрів здійснюється набагато швидше, ніж до комірок пам'яті, тому використання регістрів помітно зменшує час виконання програм.







Регістр - швидкодіючий пристрій, реалізоване на електронних компонентах.

Всі регістри мають розмір слова (16 розрядів), за кожним з них закріплено певне ім'я. За призначенням і способом використання регістри можна розбити на наступні групи:

  • регістри загального призначення (AX, BX, CX, DX, SI, DI, BP, SP);
  • сегментні регістри (CS, DS, SS, ES);
  • покажчик команд (IP);
  • регістр прапорів (Flags).

Наведемо розшифровку назв регістрів:

AX accumulator, акумулятор;
BX base, база;
CX counter, лічильник;
DX data, дані;

(Буква X - від слова eXtended, розширений: в процесорі 8080 були байтові регістри A, B, C і D, але потім їх розширили до розміру слова)

SI source index, індекс джерела;
DI destination index, індекс приймача;
BP base pointer, покажчик бази;
SP stack pointer, покажчик стека;

IP instruction pointer, покажчик команд;

SS stack segment, сегмент стека;
DS data segment, сегмент даних;
CS code segment, сегмент команд;
ES extra segment, додатковий сегмент.

Регістри загального призначення

Особливістю регістрів загального призначення є те, що їх можна використовувати в будь-яких арифметичних, логічних і т.п. машинних операціях. Наприклад, можна скласти число з регістра DI з числом з регістра SP (add DI, SP) або відняти від вмісту регістра BP вміст регістра CX (sub BP, CX).







У той же час кожен з цих регістрів має певну спеціалізацію: деякі команди вимагають, щоб їх операнд або операнди обов'язково знаходилися в певних регістрах. Наприклад, команда ділення вимагає, щоб перший операнд (ділене) знаходився в регістрі AX або регістрах AX і DX (в залежності від розміру операнда), а команди управління циклом використовують регістр CX як лічильник циклу.

При роботі зі стеком використовується регістр SP. У командах, які працюють зі стеком, передбачається, що регістр SP вказує на осередок стека, в якій знаходиться елемент, записаний в стек останнім.

Регістри AX, BX, CX і DX влаштовані так, що можливий незалежний доступ до їх старшої і молодшої половин. Позначають ці половини буквами H (high - вище, старший) і L (low - нижче, молодший) і першою літерою з назви регістра: AH і AL - в AX, BH і BL - в BX і т.д.

Відзначимо, що на частині діляться тільки регістри AX, BX, CX і DX. Запис же в інші регістри і читання з них здійснюються тільки цілком.

сегментні регістри

покажчик команд

регістр прапорів

Прапор - це біт, що приймає значення 1 ( "прапор встановлений") або значення 0 ( "прапор скинутий"). У i8086 використовується 9 прапорів, зібраних в один 16-розрядний регістр, званий регістром прапорів (Flags). Деякі розряди регістру не зайняті.

Прапори поділяються на дві групи: прапори умов (вони автоматично змінюються при виконанні команд і фіксують ті чи інші властивості їх результату (наприклад, дорівнює він нулю)) і прапори станів (їх змінює програма; стан цих прапорів впливає на подальшу поведінку процесора) .

  • CF (carry flag) - прапор переносу. Найбільш корисний в арифметичних операціях над числами без знака; наприклад, якщо при додаванні беззнакових чисел вийшла дуже велика сума - з одиницею переносу, якій немає місця в осередку, тоді прапор CF приймає значення 1, а якщо сума "вкладається" в розмір осередку, то значенням CF буде 0.
  • OF (overflow flag) - прапор переповнення. Корисний в арифметичних операціях над числами зі знаком; наприклад, якщо при додаванні або вирахуванні знакових чисел вийшов результат, по модулю перевершує допустиму величину (сталося переповнення мантиси), тоді прапор OF отримує значення 1, а якщо переповнення мантиси не було - значення 0.
  • ZF (zero flag) - прапор нуля. Встановлюється в 1, якщо результат команди виявився нульовим.
  • SF (sign flag) - прапор знака. Встановлюється в 1, якщо в операції над знаковими числами вийшов негативний результат.
  • PF (parity flag) - прапор парності. Дорівнює 1. якщо в 8 молодших бітах результату черговий команди міститься парна кількість двійкових одиниць.
  • AF (auxiliary carry flag) - прапор додаткового перенесення. Фіксує особливості виконання операцій над двійковій-десятковими числами.






Схожі статті