Professional Documents
Culture Documents
лаб 9-2023 -
лаб 9-2023 -
Лабораторна робота №8
ДОСЛІДЖЕННЯ МІКРОПРОЦЕСОРА 8086, СИСТЕМИ КОМАНД
ТА РОЗРОБКА ЕЛЕМЕНТАРНИХ ПРОГРАМ НА МОВІ АСЕМБЛЕРА
Мета роботи:
Отримати основні поняття роботи мікропроцесора. Розробка програм
обчислення простих арифметичних виразів та обробки бітової
інформації.
Теоретичний матеріал
Більші групи бітів називаються словом (word) або подвійним словом (dword –
double word). Щодо PC-сумісних комп’ютерів ми можемо сказати наступне:
2. Поняття мікропроцесора
Структура мікропроцесора Intel 8086
Мікропроцесор в найзагальнішому вигляді можна подати як набір чорних
ящиків (окремих його частин), які виконують цілком певні функції. До таких
чорних ящиків відносять:
операційний пристрій;
шинний інтерфейс;
арифметично-логічний пристрій;
лічильник команд ІР;
конвеєр;
пристрій управління.
Під операційним пристроєм традиційно розуміють набір регістрів через
які мікропроцесор спілкується з периферією. Під регістром розуміють
поіменовану комірку пам’яті.
Під шинним інтерфейсом розуміють 3 шини (шини адресу, даних,
управління).
Під арифметично-логічним пристроєм розуміють пристрій, який
виконує необхідні операції (власне процесор), а також те, що цьому сприяє –
регістр прапорців і пристрій управління.
Лічильник команд IP – основний регістр з якого пристрій управління
бере дані про команду і як слід виконати наступні.
Конвеєр – набір комірок пам’яті в які загружені команди, які будуть
виконуватися наступними. Конвеєри дозволяють прискорити роботу процесора,
оскільки деякі команди можна виконувати паралельно, а також процес передачі
даних по шинах є традиційно дуже повільним.
Пристрій управління – забезпечує синхронізацію роботи всіх пристроїв.
Саме він синхронізує пристрої по шині управління, генерує переривання
завдяки яким обслуговується вся периферія навколо процесора.
Структуру мікропроцесора показано на рис.1.
5
Регістри
Одним з найважливіших пристроїв є регістр. Кожному з регістрів
присвоюється індивідуальне ім’я. Всі регістри майже рівноправні, але деяким
надано спеціальні функції.
Історично склалось, що перші 8-бітові регістри були доповнені до рівня
16-бітових регістрів і стали називатись АХ, ВХ (рис.2). На сучасних машинах
з’явились розширені регістри (EAX).
Ми будемо оперувати регістрами: AX (AH, AL), BX (BH, BL), CX (CH,
CL), DX (DH, DL), і т.д. Структура регістра AX (16-бітовий) представлена на
рис.2, регістр AX складається із двох 8-бітовий регістрів AH – старша тетрада,
AL – молодша тетрада.
EFLAGS (біти)
Опис даних
Щоб описати дані в оперативній пам’яті або зарезервувати для них місце,
використовуйте одну з директив, перерахованих у табл.1.
8
Таблиця 1
Кількість
байт в порції Команда Приклад
даних
1 db db 1,3,8; три послідовних байти
2 dw dw 0x1234; двобайтове число в пам’яті розміститься так
0х34, 0x12
4 dd number dd 0x1; змінна number ініціалізована значенням 1
Змінна «number» тепер представляє адресу в пам’яті, за яким
записано значення 0x00000001 довжиною в подвійне слово.
Інформаційне поле
2
31 30 29 … 4 3 2 1 0
8
Старши
Біти Молодший
й
Рис.3. Форма представлення 32-бітового без-знакового числа
mov AX, –6
mov DX, –6
add AX, DX
1
Біти 15 13 12 11 10 9 8 7 6 5 4 3 2 1 0
4
Число 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1
h 0 0 5 9
Форма представлення 16-бітового без-знакового числа 89
в) в осередок даних розміром «подвійне слово» (у шістнадцятковій
системі числення – 00000059h).
Біти 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Числ
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
о
h 0 0 0 0
Біти 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Числ
0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1
о
h 0 0 5 9
Форма представлення 32-бітового без-знакового числа 89
2) Здійснюємо інверсію.
Для даних розміром «байт» у шістнадцятковій формі – А6h, для даних
розміром «слово» у шістнадцятковій формі – FFА6h та для даних розміром
«подвійне слово» у шістнадцятковій формі – FFFFFFА6h.
Біти 7 6 5 4 3 2 1 0
Числ
1 0 1 0 0 1 1 0
о
h A 6
Форма представлення 8-бітової інверсії числа 89
1
Біти 15 13 12 11 10 9 8 7 6 5 4 3 2 1 0
4
Число 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0
h F F A 6
Форма представлення 16-бітової інверсії числа 89
Біти 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Числ
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
о
h F F F F
Біти 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Числ
1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0
о
h F F A 6
Форма представлення 32-бітової інверсії числа 89
Біти 7 6 5 4 3 2 1 0
Числ
1 0 1 0 0 1 1 1
о
h A 7
Форма 8-бітового доповняльного числа –89
1
Біти 15 13 12 11 10 9 8 7 6 5 4 3 2 1 0
4
Число 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1
h F F A 7
Форма 16-бітового доповняльного числа –89
Біти 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Числ
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
о
h F F F F
Біти 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Числ
1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1
о
h F F A 7
Форма 32-бітового доповняльного числа –89
цифрових електронних схем. Але двійкова логіка має також багато спільного із
логікою програмування. Наприклад, всі арифметичні операції здійснюються на
апаратному рівні як послідовність великого числа логічних операцій. В мові
програмування Асемблер підтримується п’ять головних команд для виконання
логічних операцій: AND, OR, XOR, NOT та TEST.
Ці команди обробляють один байт або одне слово в регістрі або в комірці
пам’яті. Встановлюють прапори: CF (прапорець переносу), OF (прапорець
переповнення), PF (прапорець парності), SF (прапорець знака), ZF (прапорець
нуля).
Працюють команди логічних операцій наступним чином:
а) Команда логічного множення – AND ( Логічне І)
Схема команди: AND приймач, джерело
Призначення: операція логічного множення для операндів, приймач і
джерело розмірністю байт, слово або подвійне слово.
Алгоритм роботи: виконати операцію логічного множення над бітами
операндів, при цьому кожен біт результату дорівнює 1, якщо відповідні біти
операндів рівні 1, в інших випадках біт результату дорівнює 0; записати
результат операції в приймач;
б) Команда логічного множення TEST – працює як команда AND, але
тільки змінює прапорці стану, не впливаючи на результат. Може бути
використана для перевірки окремих байтів числа на наявність одиниць. Не
змінює операнд (приймач).
в) Команда логічного додавання – OR ( Логічне АБО)
Схема команди: OR приймач, джерело
Призначення: операція логічного АБО над бітами операндів.
Алгоритм роботи: виконати операцію логічного додавання над бітами
операндів, при цьому біт результату дорівнює 0, якщо відповідні біти операндів
джерела і приймача рівні 0, у противному випадку біт дорівнює 1; записати
результат операції в – приймач (операнд джерело залишається незмінним);
г) Команда логічного додавання за модулем двійки – XOR
Схема команди: XOR приймач , джерело
Призначення: операція логічного виключного АБО над двома операндами
розмірністю байт, слово або подвійне слово.
Алгоритм роботи: виконати операцію логічного виключного АБО над
бітами операндів, причому біт результату дорівнює 1, якщо значення
відповідних бітів операндів різні, в інших випадках біт результату дорівнює 0;
записати результат в приймач;
д) Команда логічного заперечення бітів операнда – NOT
Схема команди: NOT джерело
Призначення: інвертування всіх бітів операнда джерело.
Алгоритм роботи: інвертувати всі біти операнда джерела: з 1 у 0, з 0 у 1.
xor DL, BL
test AL, DL
21
RESET AD[0..15]
22
READY A[16..19]
24
INTA/QS1
18 25
INTR ALE/QS0
31 34
HOLD/GT1 BHE
30 27
HLDA/GT0 DT/R/S1
23 26
TEST DEN/S2
17 32
NMI RD
33 29
MN/MX W R/LOCK
19 28
CLK M/IO/S0
8086
Завдання 1.
Розробити програму в емуляторі Emu8086 для обчислення простих
арифметичних виразів згідно варіанту.
Варіант Вираз Змінні
1 y=a+c-(d-(d+8)+(a+b+c+d)-9)-b+c a=51, b=22, c=5ah, d=48h
2 y=b+b-(d-(d-1-(a+c+d-1)+5))-a+b a=30, b=44h, c=63h, d=88
3 y=b-c-(c+(1+9-(b+c+d+1-1)-b))+c a=3ch, b=40h, c=12, d=5eh
4 y=(b+b-(c+(d+7+a)-c)+c)+d+1-a+b a=2ah, b=33, c=4ch, d=43h
5 y=b-d+(c-d+1-((a-c-d)+1-1)+b)+b a=6ch, b=72h, c=32h, d=19
6 y=b-(c+c-1-(1-(a+b-c)+1))+8+a+c a=71, b=2ah, c=4bh, d=68h
7 y=(a+c-(d-(1+1+b-c))-c)+1+1+b+b a=31h, b=73, c=14, d=67
8 y=a+c+(d-(1+2+(a+c)+c))-1-5-b+b a=13h, b=24, c=1eh, d=5bh
9 y=a-(b+d-(1+1+a-(c+c)+d-5)+b)+c a=37h, b=39, c=6bh, d=2eh
10 y=b-(b-d-(d+(5-b+c))-d+1+1)-a+c a=34h, b=93, c=3eh, d=97
11 y=(a+b+(d-(1+1)+a)-c-d+1)+7-b-c a=31h, b=64, c=56, d=15h
12 y=(b+b-d+1+(5-(b-c))-d+1-9)+b-c a=4ch, b=44, c=85, d=2ch
13 y=b+(b-c+d+1+(a-(c-d)-d+1))-a+b a=12, b=51, c=42h, d=42
14 y=(a-b-d-(1+1)-b-(b-c+d)+5)+a+c a=11, b=64h, c=12, d=58h
15 y=b-(c-(c+d+9-(b-b)-c)-1)-4-a-b a=6fh, b=25, c=39, d=1ch
23
Завдання 2.
Розробити програму в емуляторі Emu8086 для обчислення
арифметичного виразу, замінюючи операції множення та ділення у виразі
командами зсуву бітів згідно варіанту.
Варіант Вираз Змінні
1 y=(b*128-d*64+(25-(b+c)/8)-a*16)/2 a=57h b=31h c=46 d=3fh
2 y=b*16+(c*128+(d-1)/2+a*256)/32 a=1bh b=5eh c=2ah d=15h
3 y=(a*64-b*16-(d+b*32)/8+c*16)/64 a=70h b=83 c=50 d=16h
4 y=b*32-(c/8+d*4+9-b*128)/256-a*16 a=73 b=95 c=89 d=24h
5 y=a*1024-(c*32+(d+1)/8-a/4)+b*8)/2 a=36h b=39 c=43 d=33
6 y=b*512-c*8+(7+(b-c)/8-d/4)/2-a*16 a=25h b=3eh c=29 d=82
7 y=b*16+c*8-(c+a)/2-(b*64+d+7)/128 a=30h b=62h c=24 d=17
8 y=a*256+((b+d*2-1)/4-(b+c)/2)*2-c a=10 b=21h c=18h d=86
9 y=(b+а)*64+c*32-(a/2+d*128)/32 a=33h b=54 c=83 d=38h
10 y=a*32+((c/16+(d+1)*8-a/4)+b/8)*2 a=73 b=95 c=89 d=24h
11 y=b/4-c+(7-d*256+(b-c)/8-d*4)/16-a*8 a=36h b=39 c=43 d=33
12 y=a*1024+c*64-(c+a-b)/2-(b*64+d)/16 a=25h b=3eh c=29 d=82
13 y=(c*16+d*64-(25-(b/8+c)*32)-a/16)*2 a=30h b=62h c=24 d=17
14 y=a*32+(c128+(d-1)/2+a*32)*256 a=10 b=21h c=18h d=86
15 y=(a*8-b/4-(d+b*32)/8+c*16)/16 a=57h b=31h c=46 d=3fh
Завдання 3.
Написати програму обчислення арифметичного виразу з використанням
операцій множення та ділення згідно варіанту.
Варіант Вираз Змінні
1 f=a-b+(c-d+(a-b)/(c+d)-a-b+c)*d a=53h b=3eh c=-72 d=-73
2 f=a/(b+c-(d-a/b+(c*d)+a))*b-c+d a=28h b=55 c=67h d=42
3 f=(a+b*(c-(d+a)/b)-c+d*a-b+c)/d a=4fh b=35 c=-18h d=-69
4 f=a/b*c+((d/(a*b+c-d*a+b)-c))-d a=91 b=31h c=54h d=-88
5 f=a-b*c*d/((a-b)-(c/d+a/b)-c-d) a=94 b=38 c=59h d=57
6 f=a-b+c*(d+((a+b))/c+d)+a-b/c/d a=5ah b=66 c=-61h d=-6ch
7 f=(a-b-c*((d-a)/b)+c+d)*a+b/c+d a=4fh b=36 c=74 d=39h
8 f=a-(b+c-d+(a-(b/c))+d+a*b)/c+d a=6eh b=33 c=-98 d=53
9 f=a-(b/(c*d+(a/b)/c/d)+a+b+c)*d a=46h b=64 c=60 d=-32
10 f=a*b/c+(d*a*b+c-d*a+b)-d*5 a=53h b=3eh c=-72 d=-66
11 f=a+b*c*d/((a-b-10)-(c/d+a/b)+d) a=28h b=55 c=67h d=57
12 f=a/b+c*(d+5*((a+b))/c+d)+a-b/c a=4fh b=35 c=-18h d=-80
13 f=a-(b+c*((d*a)+c)*d)-a+b/c+d a=91 b=31h c=54h d=-57
14 f=(b+c-d+(a-(b/c))+d*2+a*b)/c+d+4 a=94 b=38 c=59h d=49
15 f=(b*2+(c*d+(a/b)/c/d)+b/c)*d/5 a=5ah b=45 c=-61h d=-6ch
Завдання 4.
Змоделювати взаємодію мікропроцесора із зовнішніми пристроями. На
алфавітно-цифровий LCD-дисплей вивести прізвище та ім’я студента,
враховуючи, що прізвище виводиться в першій строці, а ім’я – в другій строці
LCD-дисплея.
24
LM016L
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3
4
5
6
7
8
9
10
11
12
13
14
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
21 AD[0..15]
RESET AD[0..15]
22
READY A[16..19]
24
INTA/QS1
18 25
INTR ALE/QS0 DL QL
31 34 AD1
HOLD/GT1 BHE D0 Q0
30 27 AD2
HLDA/GT0 DT/R/S1 D1 Q1
23 26
TEST DEN/S2 D2 Q2
17 32
NMI RD D3 Q3
33 29
MN/MX WR/LOCK DU QU
19 28
CLK M/IO/S0
CLK
8086
RESET
HOLD
UP
LOAD
OE
SHIFTREG_4
Реалізація 1
Реалізація 2
Зміст звіту
1. Звіт потрібно оформити в зошиті для звітів або на аркушах формату А4.
2. У звіті мають бути вказані:
номер лабораторної роботи;
тема лабораторної роботи та мета її виконання;
відповіді на контрольні запитання;
висновки по лабораторній роботі.
Контрольні запитання