
- •6.092200 – “Електричні машини і апарати”
- •Лабораторна робота №1 отримання навичок розробки програм мовою асемблера для мікропроцесора к1810вм86 у середовищі програмного пакету „turbo assembler” фірми borland
- •1.1 Теоретичні відомості
- •1.2 Порядок виконання роботи
- •1.4 Контрольні запитання
- •Лабораторна робота № 2 вивчення системи команд мп к1810вм86, команди передавання даних, математичних операцій
- •2.1 Теоретичні відомості
- •2.2 Порядок виконання роботи
- •2.4 Контрольні запитання
- •Лабораторна робота №3 вивчення системи команд мп к1810вм86, команди логічних операцій, команди організації переривань. Організація програмних циклів
- •3.1 Теоретичні відомості
- •3.2 Порядок виконання роботи
- •3.4 Контрольні запитання
- •Лабораторна робота № 4 розробка програми аналогово-цифрового перетворення і читання даних з ацп для мп к1810вм86
- •4.1 Теоретичні відомості
- •4.2 Порядок виконання роботи
- •4.4 Контрольні запитання
- •Лабораторна робота № 5 програмне опитування зовнішніх пристроїв. Програмування паралельного інтерфейсу
- •5.1 Теоретичні відомості
- •5.2 Порядок виконання роботи
- •5.4 Контрольні запитання
- •Лабораторна робота № 6 програмне опитування датчиків технологічної інформації. Програмне виведення інформації на зовнішній пристрій
- •6.1 Теоретичні відомості
- •6.2 Порядок виконання роботи
- •6.4 Контрольні запитання
- •Список літератури
- •3 9614, М. Кременчук, вул. Першотравнева, 20
2.2 Порядок виконання роботи
Одержати завдання на лабораторну роботу у викладача.
Увійти в програмне середовище DOS.
Написати текст програми в текстовому редакторі та зберегти його з розширенням *.asm в каталозі C:\CPU\TASM\WORK.
Відкрити каталог C:\CPU\TASM\WORK.
У командному рядку набрати: ta (ім’я файла) без розширення *.asm.
Виконати асемблерування та компонування файла.
Перевірити правильність виконання програми. Виконати редаґування файла.
Ознайомитися з інтерфейсом та з меню програми.
Вийти коректно з програмного середовища.
2.3 Зміст звіту
Титульна сторінка.
Найменування та мета лабораторної роботи.
Короткі теоретичні відомості.
Отримане у викладача завдання (текст програми з докладними коментарями).
Опис виконання кожного пункту завдання.
Письмові відповіді на контрольні питання.
2.4 Контрольні запитання
Проаналізувати існуючі формати даних і системи команд для МП К1810ВМ86.
Система команд МП К1810ВМ86. Група команд пересилання даних.
Система команд МП К1810ВМ86. Група команд арифметичних і логічних операцій.
Система команд МП К1810ВМ86. Група команд передачі керування.
Пояснити призначення ознак, формованих МП К1810ВМ86.
Опишіть склад команди асемблера для МП К1810ВМ86. Призначення кожного з полів команди.
Які способи адресації використовуються в програмах для МП К1810ВМ86?
Які види прямої адресації для МП К1810ВМ86 ви знаєте, чим вони відрізняються один від одного?
Пояснити в чому полягають особливості непрямої адресації.
Порівняйте довжину команд, що використовують пряму адресацію і непряму адресацію.
Лабораторна робота №3 вивчення системи команд мп к1810вм86, команди логічних операцій, команди організації переривань. Організація програмних циклів
Мета роботи. |
Освоїти лінійне програмування мовою асемблера для процесорів К1810ВМ86. Вивчити команди логічних операцій, команди переривань. |
3.1 Теоретичні відомості
Разом із засобами арифметичних обчислень система команд мікропроцесора має також засоби логічного перетворення даних. Під логічними розуміються такі перетворення даних, в основі яких лежать правила формальної логіки. Формальна логіка працює на рівні тверджень істинно і помилково. Для мікропроцесора це, як правило, означає 1 і 0 відповідно.
Рис. 3.1 - Засоби системи команд мікропроцесора для роботи з логічними даними
До засобів логічного перетворення даних відносяться логічні команди і логічні операції. На рис. 3.1 показані засоби мікропроцесора для організації роботи з даними за правилами формальної логіки. Вони розбиті на дві групи: команди й операції. Операнд команди асемблера в загальному випадку може бути виразом, який, у свою чергу, є комбінацією операторів і операндів. Серед цих операторів можуть бути і оператори, що реалізовують логічні операції над об'єктами виразу.
В архітектурі процесорів 80х86 передбачені особливі ситуації, коли процесор припиняє (перериває) виконання поточної програми і негайно передає керування програмі-обробнику, спеціально написаній для обробки цієї конкретної ситуації. Такі особливі ситуації діляться на два типи: переривання і виключення, залежно від того, чи спричинив цю ситуацію який-небудь зовнішній пристрій або команда, що виконується процесором.
Переривання - готові процедури, які комп’ютер викликає для виконання певної задачі. Існують апаратні та програмні переривання. Апаратні переривання ініціюються апаратними засобами системної плати, або плати розширення. Вони можуть бути викликані сиґналом мікросхеми таймера, сиґналом від принтера, натисканням клавіші на клавіатурі та безліччю інших причин. Апаратні переривання не координуються з роботою програмного забезпечення. Коли викликається переривання, процесор залишає свою роботу і виконує переривання, а потім повертається на колишнє місце. Для того щоб мати можливість повернутися точно в потрібне місце програми, адреса цього місця (СS:IР) запам’ятовується у стеці разом із реґістром прапорців. Потім у СS:IР завантажується адреса програми обробки переривання і їй передається керування. Програми обробки переривань іноді називають драйверами переривань. Вони завжди закінчуються інструкцією IRЕТ (повернення з переривання), що завершує процес, початий перериванням, повертаючи попередні значення реґістрів СS:IР і реґістру прапорців із стека, даючи тим самим програмі можливість продовжити виконання з того ж самого місця.
З іншого боку, програмні переривання насправді нічого не переривають. Це звичайні процедури, що викликаються програмами користувача для виконання стандартних задач, таких як обробка натискання кнопок на клавіатурі або виведення на екран. Однак ці підпрограми містяться не всередині програми користувача, а в операційній системі, і механізм переривань дає можливість звернутися до них. Програмні переривання можуть викликатися один з одного. Наприклад, усі переривання обробки введення з клавіатури DOS використовують переривання обробки введення з клавіатури BIOS для отримання символу з буфера клавіатури. Апаратне переривання може одержати керування при виконанні програмного переривання. При цьому не виникає конфліктів, тому що кожна підпрограма обробки переривання зберігає значення всіх використаних нею реґістрів та потім відновлює їх при виході, тим самим не залишаючи слідів того, що вона займала процесор.
Адреси програм переривань називають векторами. Кожен вектор має довжину 4 байти. У першому слові зберігається значення ІP, а в другому - CS. Молодші 1024 байти пам'яті містять вектори переривань, таким чином, є місце для 256 векторів. Разом узяті вони називаються таблицею векторів. Вектор для переривання 0 починається з осередку 0000:0000, для переривання 1 - з осередку 0000:0004, 2 - з 0000:0008 і т.д. Якщо проглянути 4 байти, починаючи з адреси 0000:0020, у якій міститься вектор переривання 8Н (переривання часу доби), то там буде розміщене значення A5FE00F0. Маючи на увазі, що молодший байт слова розташований спочатку і що порядок - ІР:СS, це 4-байтове значення переводиться в F000:FEA5. Це стартова адреса програми ПЗУ, що виконує переривання 8Н. На рис. 3.2 показана схема виконання програмою переривання 21Н.
Програмування контролера переривань 8259
Для керування апаратними перериваннями в усіх типах персональних комп’ютерів IBM PC використовується мікросхема програмованого контролера переривань Intel 8259. Оскільки в кожен момент часу може надійти не один запит, мікросхема має схему пріоритетів. Існує 8 рівнів пріоритетів, у комп’ютерах типу IBM PC/AT їх 16, і звернення до відповідних рівнів позначаються скороченнями від IRQ0 до IRQ7 (від IRQ0 до IRQ15), що означає запит на переривання. Максимальний пріоритет відповідає рівню 0. Додаткові 8 рівнів для AT обробляються другою мікросхемою 8259; цей другий набір рівнів має пріоритет між IRQ2 та IRQ3. Запити на переривання 0-7 відповідають векторам переривань від 8Н до 0FH; для AT запити на переривання 8-15 обслуговуються векторами від 70Н до 77Н. Нижче наведені призначення цих переривань.
-
Апаратні переривання у порядку пріоритету
IRQ 0 таймер
1 клавіатура
2 канал введення/виведення
8 годинник реального часу (тільки АT)
9 програмно переводиться в IRQ2 (тільки AT)
Апаратні переривання у порядку пріоритету
10 резерв
11 резерв
12 резерв
13 математичний співпроцесор (тільки AT)
14 контролер жорсткого диска (тільки AT)
15 резерв
3 СОМ1 (COM2 для AТ)
4 COM2 (модем для PCjr, COM1 для AT)
5 фіксований диск (LPT2 для AT)
6 контролер дискет
7 LPT1
Перериванню часу доби наданий максимальний пріоритет, оскільки якщо воно буде постійно іґноруватися, стануть невірними показання системного годинника. Переривання від клавіатури викликається при натисканні чи відпусканні кнопок: воно викликає низку подій, які звичайно закінчуються тим, що код клавіші поміщається в буфер клавіатури (звідки він потім може бути отриманий програмними перериваннями).
Мікросхема 8259 має три однобайтних реґістри, що керують вісьмома лініями апаратних переривань. Реґістр запиту на переривання (ІRR) встановлює відповідний біт, коли лінія переривання сиґналізує про запит. Потім мікросхема автоматично перевіряє, чи не обробляється інше переривання. При цьому вона запитує інформацію реґістра обслуговування (ІSR). Додатковий ланцюг відповідає за схему пріоритетів. Нарешті, перед викликом переривання перевіряється реґістр маски переривань (ІMR), щоб визначити, чи дозволено в даний момент переривання даного рівня. Як правило, програмісти звертаються тільки до реґістра маски переривань через порт 21Н і до командного реґістра переривань через порт 20Н.
Заборона/дозвіл окремих апаратних переривань
Програми на асемблері можуть заборонити апаратні переривання. Це масковані переривання; інші апаратні переривання, що виникають при деяких помилках (таких як ділення на нуль), не можуть бути масковані. Існують дві причини заборони апаратних переривань. У першому випадку усі переривання блокуються для того, щоб критична частина коду була виконана цілком, перш ніж машина зробить будь-яку іншу дію. Наприклад, переривання забороняють при зміні вектора апаратного переривання, щоб уникнути виконання переривання, коли вектор змінений тільки наполовину.
У другому випадку маскуються тільки певні апаратні переривання. Це робиться, коли деякі переривання можуть взаємодіяти з операціями, критичними до тимчасових інтервалів. Наприклад, точно розрахована за часом процедура введення/виведення не може собі дозволити бути перерваною тривалим дисковим перериванням.
Низький рівень
Виконання переривань залежить від значення прапорця переривання IF (біт 9) у реґістрі прапорців. Коли цей біт дорівнює 0, дозволені всі переривання, що дозволяє маска. Коли він дорівнює 1, всі апаратні переривання заборонені. Щоб заборонити переривання, установивши цей прапорець у 1, використовується інструкція CLІ. Для очищення цього прапора і відновлення переривань застосовується інструкція STІ. Слід уникати відключення переривань у програмах на тривалий період. Переривання часу доби відбувається 18,2 рази на секунду, і якщо до цього переривання був більш ніж один запит у той час, коли апаратні переривання були заборонені, то зайві запити будуть відкинуті й системний час буде визначатися неправильно.
Слід пам’ятати, що система автоматично забороняє апаратні переривання під час виклику програмних переривань і автоматично дозволяє їх під час повернення. Коли користувач пише свої програмні переривання, слід починати програму з інструкції STІ, якщо можна допустити апаратні переривання. Зазначимо також, що якщо за інструкцією CLІ не передає STІ, то це призведе до зупинки машини, оскільки введення з клавіатури буде заморожене.
Для маскування певних апаратних переривань потрібно просто послати необхідний ланцюжок бітів у порт за адресою 21Н, що відповідає реґістру маскування переривань (ІMR). Реґістр маскування на другій мікросхемі 8259 для AT (ІRQ8-15) має адресу порту А1Н. Слід установити ті біти реґістра, що відповідають номерам переривань, обраним для маскування. Цей реґістр можна тільки записувати. Наведений нижче приклад блокує дискове переривання. Не забудьте очистити реґістр наприкінці програми, інакше звертання до дисків буде заборонене і після завершення програми.
;маскування 6-го біта реґістру, маскування переривань
MOV АL, 01000000B ;маскуємо біт 6
OUТ 2111,AL ;надсилаємо в реґістр маскування
;переривань
MOV AL,0
OUT 21H,AL ;очищуємо IMR в кінці програми
Написання власного переривання
Існує кілька причин для написання власного переривання. По-перше, більшість із готових переривань, які забезпечуються операційною системою, не що інше, як звичайні процедури, доступні для всіх програм. Наприклад, багато програм можуть використовувати процедуру, що виводить рядки на екран вертикально. Замість того, щоб включати її в кожну програму як процедуру, користувач може встановити її як переривання, написавши програму, що залишиться резидентною у пам'яті після завершення. У цьому разі можна буде використовувати ІNT 80Н замість WRІTE_VERTІCALLY (при цьому слід пам’ятати, що виклик переривання трохи повільніший, ніж виклик процедури).
Середній рівень
Функція 25Н переривання 21Н встановлює вектор переривання на зазначену адресу. Адреси мають розмір два слова. Старше слово містить значення сеґмента (CS), молодше містить зсув (ІP). Щоб встановити вектор, що вказує на одну з ваших процедур, потрібно помістити сеґмент процедури в DS, а зсув у DX (користуючись наведеним нижче прикладом). Потім розміщують номер переривання в AL і викликають функцію. Будь-яка процедура переривання повинна завершуватися не звичайною інструкцією RET, a ІRET. (ІRET відновлює зі стеку три слова, включаючи реґістр прапорців, у той час, як RET відновлює зі стеку тільки два слова) Зазначимо, що функція 25Н автоматично забороняє апаратні переривання в процесі зміни вектора, тому не існує небезпеки, яка посередині дороги відбудеться апаратне переривання, що використовує даний вектор.
; установка переривання
PUSH DS ;зберігаємо DS
MOV DX,OFFSET ROUT ;зсув для процедури в DX
MOV AX.SEG ROUT ;сеґмент процедури
MOV DS.AX ;розміщуємо в DS
MOV AH.25H ;функція встановлення вектора
MOV AL,60H ;номер вектору
INT 21H ;змінюємо переривання
POP DS ;відтворюємо DS
; процедура переривання
ROUTINE PROC FAR
PUSH AX ;зберігаємо всі змінені реґістри
POP AX ;відтворюємо реґістри
MOV AL,20H ;ці два рядки треба використовувати
OUT 20H,AL ;тільки для апаратних переривань
IRET
ROUTINE ENDP
У кінці коду кожного з апаратних переривань потрібно прописати наступні 2 рядки коду:
MOV OUT
AL,20H 20H,AL
Якщо апаратне переривання не закінчується цими рядками, то мікросхема 8259 не очистить інформацію реґістра обслуговування, для того щоб була дозволена обробка переривань з більш низькими рівнями, ніж тільки що оброблене.
Коли програма завершується, повинні бути встановлені оригінальні вектори переривань. Наступна програма може викликати дане переривання і передати керування на те місце в пам'яті, у якому процедури користувача вже немає. Функція 35 переривання 21Н повертає поточне значення вектора переривання, поміщаючи значення сеґмента в ES, а зсув у ВХ. Перед встановленням свого переривання отримайте поточне значення вектора, використовуючи цю функцію, збережіть ці значення і потім відновіть їх за допомогою функції 25Н (як вище) перед завершенням своєї програми. Наприклад:
; - в сеґменті даних:
KEEP_CS DW 0 ;зберігає сеґмент заміненого переривання
KEEP_IP DW 0 ;зберігає зсув переривання
; - на початку програми
MOV AН, 35h ;функція одержання вектора
MOV АL,1Сh ;номер вектора
INT 21h ;тепер сеґмент у DS
;- зсув в ВХ
MOV KEEP IP,ВХ ;запам’ятовуємо зсув
MOV KЕEP_CS,ES ;запам’ятовуємо сеґмент
;- в кінці програми
CLI
PUSH DS ;DS ;буде зруйнований
MOV DX,KEEP_IP ;підготовка до відтворення
MOV AX.KEЕP_CS
MOV DS.AX ;підготовка до відтворення
MOV АН, 25h ;функції встановлення вектора
MOV АL,1Сh ;номер вектора
INT 21h ;відтворюємо вектор
POP DS ;відновлюємо вміст сеґменту DS
STI
Існують специфічні випадки, яких слід уникати при написанні переривань. Якщо нова процедура переривання повинна мати доступ до даних, то необхідно подбати про те, щоб DS був правильно встановлений (зазвичай переривання може використовувати стек викликаючої програми). Інша неприємність може бути в тому, що при закінченні програми за комбінацією «Ctrl-Break» вектор переривань не буде відтворений, якщо тільки не подбати, щоб програма реакції на комбінацію «Ctrl-Break» виконувала цю процедуру.
Низький рівень
Описані вище функції MS-DOS просто одержують чи змінюють пари слів у молодших комірках пам'яті. Зсув вектора можна обчислити простим множенням номера вектора на 4. Наприклад, щоб одержати адресу переривання 16H у ES:BX, потрібно:
; - одержання адреси переривання 16Н
SUB АХ,AХ ;встановлюємо ES на початок пам’яті
MOV ES,AX
MOV D1,16h ;номер переривання в D1
SHL D1,1 ;помножуємо на 2
SHL D1,1 ;помножуємо на 2
MOV BX,ES:[D1] ;беремо молодший байт у ВХ
MOV AX,ES:[D1| +2 ;беремо старший байт у ES
MOV ES,AX
Не рекомендується прямо встановлювати вектор переривань, обходячи функцію DOS. Зокрема, у багатозадачному середовищі операційна система може підтримувати кілька таблиць векторів переривань, і реальна фізична адреса таблиці може бути відома тільки DOS.