- •Регістри загального призначення
- •Лічильник команд, регістри прапорців
- •Особливості звернення до пам’яті:
- •Переривання
- •Загальний алгоритм виконання машинної команди
- •Введення/виведення даних
- •Лекція №4
- •Лекція №5
- •Лекція №6
- •Команди обробки рядків даних
- •Вилучення елементу з таблиці
- •Вставка елемента у таблицю
- •Лінійний пошук
- •Команди управління процесором
Лекція №4
Команди розгалуження:
До цих команд належать команди безумовного переходу , команди умовного переходу, команди зациклення, команди звернення до підпрограми та повернення з них.
Команди безумовного переходу:
Безумовний перехід – змінюють природний порядок виконання команд. При цьому змінюється лічильник команд IP, та сегментний регістр CS (в разі міжсегментних переходів).
Діляться на 2 групи:
Внутрішньосегментні (без зміни CS) NEAR PTR;
Міжсегментні (із зміною CS) FAR PTR;
Переходи є за прямою адресою і за опосередкованою адресою, тобто для внутрішньо сегментних переходів маємо тип операнда NEAR PTR і WORD PTR, а для міжсегментного переходу FAR PTR і DWORD PTR.
PTR – це спеціальна операція Pointer, яка привласнює операнду певний тип.
Умовний перехід – для процесів 8086 мають довжину 2 байта, з 386 – 4 байта (2Б – код команди, 2 – зміщення відносно поточної адреси).
Якщо виконується умова переходу, то здійснюється перехід за вказаною адресою, інакше – виконується наступна команда.
СMP AX, CX
JE M1
LOOP P1 зміщ.= адр.(М1) – адр (LOOP) = 120H – 120H =
. = 1EH.
. 127>зміщ.
- 128
.
M1:
Без урахування знаку |
Власно yмова переходу |
СССС |
З урахуван-ням знаку |
Власно yмова переходу |
СССС |
> JA/JNBE |
CF=Ø |
Ø111 |
JB/JNLE |
(CF |
1111 |
JAE/JNB/JNC |
CF=Ø |
ØØ11 |
JGE/JNL |
SF OF=Ø |
11Ø1 |
< JB/JNAE/JC |
CF=1 |
ØØØØ |
JL/JNGE |
SF OF=1 |
11ØØ |
|
CF=1 ZF=1 |
Ø11Ø |
JLE/JNG |
(CF OF ZF=1) |
111Ø |
- сума за mod 2
JC/JB/JNAE CF-1 ØØ1Ø
= JE/JZ ZF=1 Ø1ØØ
JNC/JAE/JNB CF=Ø ØØ11
<> JNE/JNZ ZF=Ø Ø1Ø1
JNO OF=0 ØØØ1 перехід за умовою
J
NP/JPO
PF=Ø
1Ø11 переповнення, за
умовою
JNC SF=Ø 1ØØ1 парності
JO OF=1 ØØØØ
JP/JPE PF=1 1Ø1Ø
JS SF=1 1ØØØ
Окремо стоїть команда
JCXZ умова – CX = Ø
Команди зациклення:
Ці команди використовують регістр-лічильник СХ.
При виконанні цих команд із
СХ віднімається 1 в молодшому розряді,
і якщо вміст СХ
,
то здійснюється зациклення за вказаною
адресою, інакше виконується команда –
вихід з циклу.
Команди:
LOOP CX
0
LOOPE/LOOPZ CX 0 i ZF=1
LOOPNE/LOOPNZ CX 0 i ZF=Ø
Ці команди двобайтні.
П
Підготовка
циклу
L1:
Тіло циклу
.
.
.
LOOP L1
Приклад додавання багатобайтних значень:
OP1 DB 1AH, 3CH, 81H, 34H, 51H
OP2 DB ØA3H, 2BM, 93H, 45H, 55H
.
.
.
ознака переносу CLC
MOV SI, OFFSET OP1
MOV DI, OFFSET OP2
MOV CX, OP2-OP1
CYCLE: MOV AL , [SI]
ADС [DI] , AL ; SBB
DAA ; DAS
INC SI
INC DI
LOOP CYCLE
При відніманні замість ADС використовують SBB. В разі упакованих десяткових даних (BCD) треба здійснювати десяткову проекцію при додаванні або відніманні (після ADS встановлюється команда DAA – при «+» і DAS - при «-»)
Команди звернення до підпрограм та повернення з них мають такі ж формати як і команда JMP.
CALL <адреса>
В стек записується IP або IP та CS (міжсегментні). Після чого в ці регістри записується перехід до підпрограми. Останньою командою, що виконується має бути RET,що зчитує зі стеку IP та CS.
RET може мати операнди, які використовуються у разі передачі параметрів через стек.
