- •Регістри загального призначення
- •Лічильник команд, регістри прапорців
- •Особливості звернення до пам’яті:
- •Переривання
- •Загальний алгоритм виконання машинної команди
- •Введення/виведення даних
- •Лекція №4
- •Лекція №5
- •Лекція №6
- •Команди обробки рядків даних
- •Вилучення елементу з таблиці
- •Вставка елемента у таблицю
- •Лінійний пошук
- •Команди управління процесором
Загальний алгоритм виконання машинної команди
Читання коду
Виконання
машинних команд
Підгот.
та перехід до підпрог. обробки
переривань
підп
обробки переривання
ТАК
НІ
Введення/виведення даних
Для повільних зовнішніх пристроїв (клавіатура, миша, дисплей) обмін даними здійснюється за допомогою команд вводу-виводу (In - Out). При цьому обмін здійснюється між регістром акумулятора та спеціальним контролером введення/виведення, що з’єднаний зі зовнішнім пристроєм.
При виконанні операції введення/виведення використовують 3 види інформації:
Інформація про стан зовнішнього пристрою (готовий – не готовий);
Інформація управління для зовнішнього пристрою (наприклад, увімкнення двигуна на пристрої друку);
Власні дані для введення/виведення (для цього в контролері існують спеціальні регістри (порти), через які передається згадана інформація, як правило 8 розрядна).
Для швидких зовнішніх пристроїв (диски) обмін інформації через МП є непродуктивним і повільним, тому для таких пристроїв був розроблений спеціальний механізм обміну DMA (прямий доступ до пам’яті – Direct Memory Acsess). Для виконання такого обміну існують контролери DMA або контролери прямого доступу до пам’яті, які спеціальним чином програмуються. Ці контролери при виконанні обміну між швидким зовнішнім пристроєм (диском) та ОП сам процесор переводиться у так званий ІІІ стан (відключення МП від пам’яті, високоінтелектуальний І, ІІ стани – читання, запис). При цьому контролер посилає на МП сигнал HOLD (захоплення системної шини). При виконанні поточної команди, коли системна шина звільнюється, МП посилає сигнал підтвердження захоплення і МП переходить у ІІІ стан. Після цього здійснюється обмін даними між оперативною пам’яттю (ОП) і зовнішнім пристроєм через контролер прямого доступу до пам’яті.
Формати команд:
Машинні коди команд мікропроцесора можна розділити на групи:
Б
КОП
езоперандні команди (довжина 1Б чи 2Б);О
КОП ОП.1
днооперандні;
Д
КОП ОП.1 ОП.2
вооперандні;
Види адресацій до операндів такі:
через регістри загального призначення (коли операнди знаходяться у регістрах);
через пам’ять (коли операнд знаходиться у пам’яті);
безпосередньо через операнд (коли операнд знаходиться у коді команд).
Типовим найбільш розповсюдженим форматом команди є такий :
Код
опер. DW
Зміщення
Безпос.операнд
регістр – регістр;
регістр – пам’ять;
пам’ять – регістр;
регістр – безпосередній операнд;
пам’ять – безпосередній операнд.
Зміщення використовується для обчислення адреси операндів пам’яті. Розряд W вказує на тип операнда (W=0 – операнд-байт, W=1 – ореранд-слово).
Розряд D – розряд напрямку вказує на розміщення результату виконання операцій.
Якщо D=1, то результат розміщується в регістрі;
Якщо D=0, то результат – в пам’яті.
Приклад:
Мають однакові коди, але відрізняються тільки в розряді D.
Види адресацій до операндів, що знаходяться у пам’яті:
пряма адресація;
через базові регістри;
через індексні регістри;
базово – індексна адресація;
адресація з автоінкрементом адреси;
адресація з автодекрементом адреси.
Останні два види виконуються в командах обробки рядків даних.
-
R/MMOD
00
01
10
11
W=0
W=1
000
[BX+SI]
[BX+SI]+D
BX+SI+D
AL
AX
001
[BX+DI]
[BX+DI]+D
BX+DI+D
CL
CX
010
[BP+SI]
[BP+SI]+D
BP+SI+D
DL
DX
011
[BP+DI]
BP+DI+D
BP+DI+D
BL
BX
100
[SI]
SI+D
SI+D
AM
SP
101
[DI]
DI+D
DI+D
CM
BP
110
пряма
BP+D
BP+D
DH
SI
111
BX
BX+D
BX+D
BH
DI
3
На відміну від переривання захоплення системною шиною під час прямого доступу до пам’яті може відбутися при виконанні поточної команди, якщо виконання цієї команди під час захоплення не було пов’язане із зверненням до оперативної пам’яті. Замовчення, що прийняті в апаратурі МП:
Для обчислення фізичної адреси поточної команди, завжди використовується сегментний регістр CS (початок сегменту) і регістр ЕIP (IP) (внутрішньо сегментна адреса) – замовчення не відмінюється.
Для доступу до даних при обчислені фізичної адреси використовуємо сегментний регістр DS - замовчення, що відміняється.
Для доступу до стеку при обчислені фізичної адреси, завжди використовується сегментний регістр SS (початкова адреса сегмента) та регістр SP (внутрішньо сегментна адреса) – замовчення не відміняється.
Якщо при доступі до даних використовується базовий регістр BP, то при обчислені адреси використовується сегментний регістр SS - замовчення відміняються
Для команд обробки рядків даних при обчисленні фізичної адреси операнда-джерела використовується сегментний регістр DS - замовчення, що відміняється
Для команд обробки рядків даних при обчислені фізичної адреси операнда-приймальника завжди використовується сегментний регістр ES - замовчення не відмінюється
Для команд обробки рядків даних внутрішньо сегментна адреса операнда-джерела завжди розміщується в регістрі SI - замовчення не відмінюється
Для команд обробки рядків даних внутрішньо сегментна адреса операнда-приймальника завжди знаходиться в регістрі DI - замовчення не відмінюється
Відміна замовчання здійснюється за допомогою спеціальної команди або префіксного байта, який відміняє замовчання для виконання наступної за ним команди.
МОВА ASSEMBLER
ASSEMBLER – символічна мова машинних команд.
Мова ASSEMBLER складається з 3 основних операторів:
оператор машинних команд (породжує коди машинних команд);
директиви мови ASSEMBLER (не породжують кодів команд, передають службову інформацію транслятору з мови ASSEMBLER); винятком є директиви визначення констант, що породжують коди констант;
макрокоманди.
Існують ще неосновні оператори:
оператор-коментар, який роздруковується у лістингу програми і призначений для кращої читабельності програми;
оператор-мітка – являє собою додаткову символічну адресу у вигляді мітки.
Оператор – коментар має такий вид:
<OK>:=<OK><K><OKO>
(OK – ознака коментарю;
К – коментар;
ОКО – ознака кінця оператора).
Ознака кінця оператора (ØDM, ØAH).
Оператор – мітка:
<OM>:=<M><P1>[<OK><K>]<OKO>
(М – мітка;
Р1 – символ розподільника;
ОК – ознака коментарю;
К – коментар;
ОКО – ознака кінця коментарю.
[ ] – вказують на необов’язкові елементи.
Загальна структура основного оператора Assembler:
<OOA>:= [<M><P1>] [<префікси>] <P2> <мнемоніка> <P2> [<список операндів>] [<OK><K>]<OKO>
ООА – основний операнд Assembler;
М – мітка;
Р1 – розподільник 1;
Р2 – розподільник 2;
К – коментар;
ОКО – ознака кінця оператора).
<список операндів>:=<операнд>|<список операндів>
Пробіл – неосновний розподільник в операторах Assembler.
Операнди в загальному вигляді являють собою вирази, що являють собою сукупність термів, які поєднані знаками операцій.
Вирази
Вирази являють собою сукупність термів (елементів виразу), які поєднані знаками операцій. Терми – самовизначені та несамовизначені.
SHORT OR,XOR AND NOT LT,GT,LE,GE,EQ,NE +,- *, / MOD, SHR, SHL PTR, TYPE, LENTH, SIZE
Як вже було зазначено, вирази в загальному вигляді використовуються як операнди. Виразі бувають постійними, тобто використовуються для визначення безпосереднього операнду, та ті, що переміщуються (вказують на адреси).
Оператори машинних команд:
Арифметико-логічні команди:
ADD, ADС, SUB, SBB, CMP, OR, XOR, AND, TEST
Кожна з цих команд має 3 формати:
о
DW ………
сновний
формат – з постбайтною структурою
с
W
пеціально для акумуляторів
р
……
егістр або пам’ять – безпосередній операнд
Якщо йдеться про операнд пам’яті, можлива вставка 1-байтового або 2-байтового зміщення (будемо мати 6Б).
ADD, ADС – команди додавання
ADD – просте додавання;
ADС – додавання з переносом в молодший операнд;
SUB, SBB – команди віднімання
SUB – просте віднімання;
SBB – віднімання із позикою;
CMP – команда порівняння – віднімання без руйнування, команда використовується тільки для ознак результату;
OR, XOR – логічні команди
OR – являє собою порозрядне, логічне додавання двох операндів;
XOR – команда порозрядного додавання по модулю 2.
AND – команда порозрядного логічного множення операндів;
TEST – команда порозрядного логічного множення без руйнування.
Використовуються для перевірки окремих байтів, лише змінює ознаки результату.
-
OF
SF
2F
AF
PF
CF
ADD
+
+
+
+
+
+
ADC
+
+
+
+
+
+
SUB
+
+
+
+
+
+
SBB
+
+
+
+
+
+
CMP
+
+
+
+
+
+
OR
Ø
+
+
?
+
Ø
XOR
Ø
+
+
?
+
Ø
AND
Ø
+
+
?
+
Ø
TEST
Ø
+
+
?
+
Ø
Ознака переповнення та ознака переносу залишається не визначеною ознакою додаткового переносу, решта логічних ознак встановлюється.
INC – додає 1 в молодший розряд операнду;
DEC – віднімає 1 із молодшого розряду операнда;
NEG – від нуля віднімається операнд і результат розміщується на місце цього операнду;
INC і DEC – змінюють перші 5 ознак, а CF – не змінює.
NEG – змінює усі 6 ознак;
NOТ – інверсія – при виконанні команд код операнду інвертується
0
1
1 0
Крім цього є команди множення MUL, IMUL.
MUL – множення без урахування знаку;
IMUL – множення з урахуванням знаку. При перемноженні байтів один з операндів має знаходитись в регістрі AL, а результат – в регістрі AX.
П ри перемноженні слів один з операндів має знаходитись в регістрі AX, а результат – у парі регістрів DX (старша частина), AX (молодша частина).
Я
DX
К
AX
DIV – ділення операнда що знаходиться в парі регістрів AX:DX;
IDIV – AX DX ділення на слово на операнд, що знаходиться в регістрі AX на байт. Але можливо некоректне ділення (результат може не поміщатись в регістр). При діленні на байт результат в регістрі AL, а залишок в регістрі – AH. При діленні на слово результат в регістр DX, остача – в регістр AX.
Команди десяткової корекції:
DAA, AAA, DAS, AAS, AAD, AAM
DAA – команда десяткової корекції упакованих даних після додаванні;
AAA – команда десяткової корекції распакованих даних після додавання;
DAS – команда десяткової корекції упакованих даних після віднімання;
AAS – команда десяткової корекції распакованих даних після віднімання;
AAD – десяткова корекція перед діленням (при цьому упакований двозначний десятковий код перетворюється у звичайний двійковий код);
AAM – десяткова корекція після ділення (при цьому двійковий код перетворюється в десятковий код);
CBW – перетворення байта у слово. Виконується перед діленням IDIV – розповсюджує у регістр АН знак операнду, що знаходиться а регістрі AL
CWD – перетворення слова у подвійне слово – для команди IDIV – розповсюджує у регістр DX (ЕDX ) знак операнду, що знаходиться а регістрі AX (EAX).
