667.50K
Категория: ЭлектроникаЭлектроника

Команди МП 8088/86. Зміст команд. Лекция 8

1.

Розділ 2. Команди МП 8088/86
2.1. Зміст команд
Мікропроцесор має 92 команди, які можно разділити на
7 груп:
1. Команди пересилки даних між регістрами, комірками і
портами введення/виведення;
2. Арифметичні команди;
3. Команди над бітами, які здійснюють зсуви і логічні
операції;
4. Команди передачі управління, виклику процедур і
повернення з процедури;
5. Команди обробки рядків;
6. Команди переривань для обробки специфічних подій;
7. Команди управління процесором - встановлення і
скидання прапорців стану, зміну режиму
функціонування МП.

2.

2.3. Команди логічної обробки даних
Команди діляться на 4 групи:
1. Логічні команди;
2. Команди зміщення;
3. Команди циклічного зміщення;
4. Команди обробки бітів даних.

3.

4.

2.3.1. Логичні команди
(AND, OR, XOR, NOT, TEST)
Ці команди реалізують порозрядні операції, тобто, іий розряд результату – залежить від і-го розряду
операнду. Операції виконуються паралельно над усіма
розрядами. “true” – коли буде одиничний біт, хоча б в
одному розряді результату і “false” – коли в усіх бітах
результату нулі.
Команди змінюють всі прапорці умов, але частіше
звертаємо увагу на прапорець ZF. Якщо результат “true”, то ZF = 0, а якщо “ false”, то ZF = 1.
Операндами логічних операцій можуть бути слова
або байти, але НЕ одночасно.
Наприклад:
AND AX, BX

5.

Команда ”AND”
AND приймач, джерело - операція логічного
множення. Команда виконує порозрядно логічну
операцію “І” (кон’юнкцію) над бітами операндів приймач
і джерело. Результат записується на місце приймача.
Наприклад:
AND AX, BX

6.

Команда AND використовується для селективного
встановлення 0 в тих бітах приймача, яким відповідає 0
в джерелі. Підбираючи відповідні біти джерела,
впливаємо на визначені біти приймача. Такі дії часто
виконуються над бітами для управління пристроями
обміну. При цьому операнд-джерело називається
маскою, а сама операція - маскуванням.
Наприклад:

7.

Операндами команди AND можуть бути байти чи
слова. Можуть використовуватися два регістри, регістр
зі словом (байтом пам’яті) і безпосереднє значення:
AND AX, BX - два регістри
AND AL, M_BYTE - регістр з байтом
AND M_BYTE, AL - регістр з байтом
AND TABLE [BX], MASK - регістр зі словом
AND BL, 1101B - безпосереднє значення

8.

Відповідно, команда AND змінює приймач. Оскільки,
біт змінюється лише самим пристроєм, то можна
використовувати команду AND для перевірки стану
пристрою.
Наприклад, порт 200 з’єднаний з 16-бітовим
регістром зовнішнього пристрою і 6-й біт показує
ввімкнений (1) чи вимкнений (0) даний пристрій.
CHECK: IN AX, 200
AND AX, 01000000B
JZ CHECK ; вимкнено

9.

Програма може працювати далі лише тоді, коли пристрій
ввімкнений:
Якщо, пристрій вимкнений, то в 6-му біті - 0, і результат
команди AND - 0, відповідно, коли ZF = 1 виконується JZ.
Як тільки в біті буде 1, ZF = 0 - команда JZ НЕ виконується
11
OF
0
07
SF
r
06
ZF
r
02
PF
r
00
CF
0

10.

Команда ”OR ”
OR приймач, джерело — операція логічного
додавання.
Команда виконує порозрядно логічну операцію
АБО (диз’юнкція) над бітами операндів приймач і
джерело. Результат записується на місце приймача:
Отже, команду OR використовують для
селективного встановлення 1 в приймачі.
OR AX, BX

11.

Команда ”XOR ”
XOR приймач, джерело — операція побітового
виключаючого додавання.
Команда порозрядно виконує операцію виключаючого
АБО над бітами операндів приймач і джерело. Результат
записується на місце приймача.
Встановлює 1 в ті біти приймача, які відрізняються
від бітів джерела.
Приклад:
XOR AX, TEST_PAR
JZ ALPHA

12.

Якщо, хоча б в одному біті, не співпадають коди, то
результат команд XOR=1 і ZF=0, отже, команда JZ не
буде виконана. Вона буде виконуватися лише тоді, коли
операнди повністю співпадають. Команда XOR змінює
приймач.
11
OF
0
07
SF
r
06
ZF
r
04
AF
?
02
PF
r
00
CF
0

13.

Команда ” NOT ”
NOT операнд — операція логічного заперечення.
Результат записується на місце операнда.
Команда NOT змінює всі біти на протилежні:
Приклад:
flag db
0ffh ; значення прапорця — істина
...
cycl:
...
CMP flag,0
JE
m1
...
m1: not flag ;встановити прапорець в істину
Виконання команди НЕ впливає на прапорці

14.

Команда ” TEST ”
TEST приймач, джерело — операція “перевірити”
(способом логічного множення).
Команда виконує порозрядно операцію AND над бітами
операндів приймача і джерела.
Стан операндів залишається сталим, змінюються тільки
прапорці ZF, SF і PF, що дає можливість аналізувати стан
окремих бітів операндів без зміни їх стану.
Якщо, хоча б одна пара бітів дорівнює 1, то
результат команди дорівнює 1, отже, ZF = 0.

15.

Наприклад:
TEST al,01h
JNZ m1
;перехід, якщо нульовий біт al дорівнює 1
11
OF
0
07
SF
r
06
ZF
r
02
PF
r
00
CF
0

16.

2.3.2. Команди зсуву
SHL, SHR,
SAL, SAR,
SHLD, SHRD
ROL, ROR,
RCL, RCR
До цієї групи належить 10 команд.
6 зміщують операнд:
(SHL, SHR, SAL, SAR, SHLD, SHRD)
4 крутять чи циклічно зміщують операнд:
(ROL, ROR, RCL, RCR).

17.

SHL операнд, лічильник зміщень (Shift Logical
Left) – логічне зміщення ліворуч.
Алгоритм:
1. Черговий зміщуваний біт встановлює прапорець CF;
2. Біт, що вводитья з іншого кінця, дорівнює 0;
3. При зміщенні чергового біта він переходить в
прапорець CF, при цьому значення попереднього
зміщеного біта губиться!

18.

Вміст операнди зміщується ліворуч на кількість бітів,
що визначається значенням лічильника зміщень.
Праворуч (в позицію молодшого біту) записуються нулі;
SHL AX, CL -- помножити AX без знаку на 2CL
AX=00000101B; AX=510
CL=2
SHL AX, CL; AX =00010100B (AX= 5*22 =20)

19.

SHR операнд, лічильник зміщень (Shift Logical Right)
— логічне зміщення праворуч.
Вміст операндів зміщується праворуч на кількість бітів,
яка визначається значенням лічильника зміщень. Ліворуч
(в позицію більшого знакового біта) записуються нулі. На
рис. показано принцип роботи цих команд.
SHR AX, CL - поділити AX без знаку на 2CL
AX=00010100B; AX=2010
CL=2
SHR AX, CL; AX =00000101B (AX= 20/22 =5)

20.

SAL операнд, лічильник зміщень (Shift Arithmetic Left)
—арифметичне зміщення ліворуч.
Вміст операнду зміщується ліворуч на кількість бітів,
яка визначається лічильником зміщень. Праворуч (в
позицію молодшого біта) записуються нулі. Команда SAL
не зберігає знак, але встановлює прапорець CF у випадку
зміни знаку черговим зміщуваним бітом. У іншому
випадку команда SAL повністю аналогічна команді SHL.
SАL AX, CL - помножити AX зі знаком на 2CL

21.

SAR операнд, лічильник зміщень (Shift Arithmetic
Right) — арифметичне зміщення праворуч.
Вміст операнду зміщується праворуч на кількість
бітів, яка визначається значенням лічильника зміщень.
Команда SAR зберігає знак, встановлюючи його після
зміщення кожного чергового біту.
SAR AX, CL - поділити AX зі знаком на 2CL.

22.

SHLD операнд1, операнд2, лічильник зміщень — зміщення
ліворуч подвійної точності.
Команда SHLD виконує заміну шляхом зміщення бітів
операнда операнд1 ліворуч, заповнюючи його біти
праворуч значеннями бітів, витісняючих з операнд2.
Кількість зміщених бітів визначається значенням
лічильник_зміщень, яке може лежати в діапазоні 0...31.
Це значення може задаватися безпосереднім операндом
чи міститися в регістрі CL.
Значення операнд2 НЕ змінюється.

23.

Алгоритм роботи:
1. Змістити операнд1 ліворуч на кількість бітів,
визначених операндом лічильник_зміщень (CL);
2. Одночасно зсунути операнд2 ліворуч на кількість
бітів, визначених операндом лічильник_зміщень (CL).
3. Висунуті під час зсува ліворуч з операнд2 біти
вставляються в операнд1 с його правого краю.
Лічильник зміщень
копія
Прапорець cf
операнд_2
операнд_1
4
1
2
3

24.

SHRD операнд1,операнд2, лічильник зміщень —
зміщення праворуч подвійної точності.
Команда SHLD виконує заміну шляхом зміщення бітів
операнд1 праворуч, заповнюючи його біти ліворуч бітами,
які витісняються із операнд2 згідно схемі на рис. Кількість
зміщуваних бітів визначається лічильником зміщень.
Значення лежить в діапазоні 0...31. Це значення може
задаватися операндом або зберігатися в регістрі CL.
Значення операнд2 НЕ змінюється.

25.

Алгоритм роботи:
1. Зсунути операнд1 праворуч на кількість бітів,
визначених операндом лічильник_зміщень (CL);
2. Одночасно зсунути операнд2 праворуч на кількість
бітів, визначених операндом лічильник_зміщень (CL).
3. Висунуті під час зміщення ліворуч з операнд2 біти
вставляються в операнд1 з його правого краю.

26.

2.3.3. Команди циклічного зміщення
1. Команди простого циклічного зміщення
Алгоритм роботи:
1. Зміщення всіх бітів операнду ліворуч на один
розряд, при цьому більший передається в операнд
праворуч і стає значенням молодшого біту
операнду;
2. Одночасно бітів, що зміщувався стає значенням
прапорця переносу CF;
3. Вказані вище дії повторюються кількість раз, яке
дорівнює значенню лічильник_зміщень;

27.

ROL операнд, лічильник_зміщень (Rotate Left) —
циклічне зміщення ліворуч.
Вміст операнда зміщується ліворуч на кількість бітів,
що визначається операндом лічильник зміщень.
Зміщувані біти записуються праворуч в той самий
операнд.

28.

ROR операнд, лічильник_зміщень (Rotate Right) —
циклічне зміщення праворуч.
Вміст операндів зміщується праворуч на кількість
бітів, що визначається операндом лічильник_зміщень.
Зміщувані біти записуються ліворуч в той самий
операнд.

29.

2. Команди циклічного зміщення через прапорець
перенесення CF
Алгоритм роботи:
1. Зміщення всіх бітів операнду на один розряд, при
цьому старший біт операнду стає значенням
прапорця перенесення CF;
2. Одночасно старе значення прапорця перенесення
CF зміщується в операнд праворуч і набуває
значення молодшого біту операнду;
3. Вказані вище дії повторювати кількість разів, що
вказана в лічильнику зміщень.

30.

RCL операнд, лічильник_зміщень (Rotate through
Carry Left) — циклічне зміщення ліворуч через
перенесення.
Вміст операнду зміщується ліворуч на кількість бітів,
що визначається операндом лічильника зміщень.
Зміщувані біти почергово стають значеннями прапорця
перенесення CF.

31.

RCR операнд, лічильник_зміщень (Rotate
through Carry Right) — циклічне зміщення праворуч
через перенесення.
Вміст операнду зміщується праворуч на кількість
бітів, що визначається операндом лічильника
зміщень. Зміщувані біти почергово стають
значеннями прапорця перенесення CF.
Ці команди виконуються швидше ніж MUL та DIV
English     Русский Правила