МІКРОПРОЦЕСОРНІ ПРИСТРОЇ

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Методичні вказівки
Предмет:
Мікропроцесори

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ КРЕМЕНЧУЦЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ІМЕНІ МИХАЙЛА ОСТРОГРАДСЬКОГО ІНСТИТУТ ЕЛЕКТРОМЕХАНІКИ, ЕНЕРГОЗБЕРЕЖЕННЯ І КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ  МЕТОДИЧНІ ВКАЗІВКИ ЩОДО ВИКОНАННЯ ЛАБОРАТОРНИХ РОБІТ З НАВЧАЛЬНОЇ ДИСЦИПЛІНИ “МІКРОПРОЦЕСОРНІ ПРИСТРОЇ” ДЛЯ СТУДЕНТІВ ДЕННОЇ ТА ЗАОЧНОЇ ФОРМ НАВЧАННЯ ЗІ СПЕЦІАЛЬНОСТЕЙ: 6.092200 – "ЕЛЕКТРОМЕХАНІЧНІ СИСТЕМИ АВТОМАТИЗАЦІЇ ТА ЕЛЕКТРОПРИВОД" (У ТОМУ ЧИСЛІ СКОРОЧЕНИЙ ТЕРМІН НАВЧАННЯ), 6.092200 – “ЕЛЕКТРОМЕХАНІЧНЕ ОБЛАДНАННЯ ЕНЕРГОЄМНИХ ВИРОБНИЦТВ” (У ТОМУ ЧИСЛІ СКОРОЧЕНИЙ ТЕРМІН НАВЧАННЯ), 6.092200 – “ЕЛЕКТРИЧНІ МАШИНИ І АПАРАТИ” КРЕМЕНЧУК 2012 Методичні вказівки щодо виконання лабораторних робіт з навчальної дисципліни “Мікропроцесорні пристрої” для студентів денної та заочної форм навчання зі спеціальностей: 6.092200 – "Електромеханічні системи автоматизації та електропривод" (у тому числі скорочений термін навчання), 6.092200 – “Електромеханічне обладнання енергоємних виробництв” (у тому числі скорочений термін навчання), 6.092200 – “Електричні машини і апарати” Укладач старш. викл. М.Ю. Юхименко Рецензент доц. А.І. Гладир Кафедра систем автоматичного управління та електропривода Затверджено методичною радою КрНУ Протокол №_________від__________2012 р. Заступник голови методичної ради___________доц. С.А. Сергієнко ЗМІСТ Вступ………………………………………………………………………... 4 Лабораторна робота №1. Отримання навичок розробки програм мовою асемблера для мікропроцесора К1810ВМ86 у середовищі програмного пакету „Turbo Assembler” фірми Borland............................. 5 Лабораторна робота №2. Вивчення системи команд МП К1810ВМ86, команди передавання даних, математичних операцій.............................. 14 Лабораторна робота №3. Вивчення системи команд МП К1810ВМ86, команди логічних операцій, команди організації переривань. організація програмних циклів.................................................................... 30 Лабораторна робота №4. Розробка програми аналогово-цифрового перетворення і читання даних з АЦП для МП К1810ВМ86..................... 41 Лабораторна робота №5. Програмне опитування зовнішніх пристроїв. Програмування паралельного інтерфейсу.................................................. 52 Лабораторна робота №6. Програмне опитування датчиків технологічної інформації. Програмне виведення інформації на зовнішній пристрій........................................................................................ 58 Список літератури ......................................................................................... 70 ВСТУП Дисципліна “Мікропроцесорні пристрої” продовжує цикл дисциплін, які вивчають питання побудови мікропроцесорних пристроїв, створення програмного забезпечення для складних систем керування технологічним обладнанням, що забезпечує узгоджену роботу їх інформаційних засобів. Метою дисципліни є вивчення роботи та структури сучасних мікропроцесорів і мікроконтролерів, принцип їх застосування в системах керування; освоєння методів розробки керуючих програм для розв’язання типових задач функціонування мікропроцесорних систем. Основним завданням, що ставиться перед студентами, є здобуття знань щодо побудови сучасних мікропроцесорів і мікроконтролерів, їх можливостей; основи організації пам’яті, системи вводу/виводу і переривань, використання портів. Вивчення основних типів команд низькорівневих мов програмування, набуття навичок складання найбільш поширених мовних конструкцій, що забезпечить подальше опанування та створення нових комп'ютерних інформаційних технологій різноманітного призначення. ЛАБОРАТОРНА РОБОТА №1 ОТРИМАННЯ НАВИЧОК РОЗРОБКИ ПРОГРАМ МОВОЮ АСЕМБЛЕРА ДЛЯ МІКРОПРОЦЕСОРА К1810ВМ86 У СЕРЕДОВИЩІ ПРОГРАМНОГО ПАКЕТУ „TURBO ASSEMBLER” ФІРМИ BORLAND Мета роботи. Вивчення інтерфейсу та основних принципів роботи з програмним пакетом TASM. Набуття навичок роботи з відлагоджувачем. 1.1 Теоретичні відомості Відлагоджувач Turbo Debugger являє собою набір інструментальних засобів, що дозволяють відлагоджувати програми на рівні вихідного тексту і призначений для програмістів, що використовують сімейство компіляторів Borland. До пакету відлагоджувача входять набір виконуваних файлів, утиліт, довідкових текстових файлів і прикладів програм. Turbo Debugger дозволяє відлагоджувати програми для Microsoft Windows та DOS. Численні перекриваючі одне одного вікна, а також поєднання меню, що спускаються і розкриваються, забезпечують швидкий, інтерактивний, орієнтований на зручність для користувача інтерфейс. Інтерактивна, контекстно-залежна довідкова система забезпечує розроблювача підказкою на всіх стадіях роботи. Крім того, Turbo Debugger має повний набір засобів відлагоджування: обчислення будь-яких виразів мовою Сі, C++, Pascal і Assembler; повне керування виконанням програми, включаючи програмну анімацію; доступ на низькому рівні до внутрішніх реґістрів процесора і системної пам'яті; повнофункціональні засоби перевірки даних; розвинуті можливості керування точками зупинки; трасування повідомлень Windows, включаючи точки зупинки за повідомленнями; виконання програми у зворотному напрямку; повна підтримка об'єктно-орієнтованого програмування, включаючи перегляд класів і перевірку об'єктів; макрокоманди у вигляді послідовності натискань клавіш, що прискорює виконання команд; копіювання і вставка фраґментів інформації між вікнами й діалогами; контекстно-залежні меню; можливість відлагоджування великих програм; діалогові вікна, що дозволяють настроїти параметри відлагоджувача; можливість відлагоджування 16- і 32-розрядних програм для операційної системи MS Windows; збереження параметрів поточного сеансу; можливість вибору для елементів, що виводяться в Turbo Debugger, національного порядку сортування. Перш ніж завантажувати програму у відлагоджувач Turbo Debugger, необхідно компілювати її вихідний текст, виконаний в exe-файлі в режимі формування повної відлагоджувальної інформації. При запуску відлагоджувача необхідно, щоб були доступні як виконуваний exe-файл, так і файли з вихідним текстом програми. Ці вимоги виконуються автоматично при використанні пакетного командного файла ta.bat, що знаходиться в каталозі TASM. Робота з меню Команди глобальних меню Turbo Debugger виводяться у верхній частині екрану в рядку меню. Якщо не активізоване яке-небудь діалогове вікно, то ці команди завжди є доступними. Щоб відкрити меню Turbo Debugger, слід натиснути функціональну клавішу F10, за допомогою клавіш керування курсором переміститися до потрібного пункту меню і натиснути клавішу Enter. Можна також після натискання клавіші F10 для переходу до потрібного пункту натиснути його букву, що підсвічується, або відразу натиснути комбінацію клавіш Alt + буква (без F10). Системне меню вибирається за комбінацією Alt + пробіл. Меню відкривається також клацанням "мишею" на відповідному пункті. У командному рядку DOS потрібно ввести ім’я файла, що передбачається підлагоджувати, не вказуючи розширення, потім виконується асемблерування та компонування файла і запускається відлагоджувач Turbo Debugger. Відкриваємо вікно CPU. Воно має вигляд, що приблизно показаний на рис. 1.1  Рис. 1.1 - Вікно відлагоджувача Turbo Debugger із завантаженою програмою Нижче дається пояснення структури рядка меню відлагоджувача Turbo Debugger. Ё Repaint desktop Перерисовує екран. Restore standard Відновлює стандартний вигляд вікна. About Виводить інформацію про Turbo Debugger. File Open Завантажує у відлагоджувач нову програму. Change dir Виконує зміну диска та/або директорії. Get info Видає інформацію про програму. DOS shell Запускає командний процесор DOS. Resident Робить Turbo Debugger резидентним. Symbol load Завантажує таблицю символьних імен, незалежну від файла .exe. Table relocate Встановлює базову адресу таблиці символьних імен. Quit Вихід з відлагоджувача та повернення в DOS. Edit Copy Копіює виділені мишею елементи підвікна в буфер обміну. Paste Вставляє в підвікно елементи з буфера обміну. Copy to log Записує у вікно реєстрації елементи підвікна. Dump pane to log Записує у вікно реєстрації вміст поточного підвікна. View Breakpoints Перегляд точок зупинників. Stack Перегляд стеку виклику. Log Перегляд журналу подій і даних. Watches Перегляд значень змінних, які відслідковуються. Variables Перегляд списку локальних та глобальних змінних. Module Перегляд списку модулів, які використовуються в програмі. File Перегляд вмісту файла в текстовому або шістнадцятковому форматі. CPU Перегляд машинних команд, даних та вмісту стеку. Dump Перегляд порядкового вмісту області пам’яті. Registers Перегляд стану реґістрів та прапорців МП. Numeric processor Перегляд стану NDCP. Execution history Виводить асемблерний код, який був запам’ятований для зворотного трасування або зворотного відтворення натискань клавіш. Hierarchy Виводить список об’єктів чи типів класу та ієрархічне дерево. Windows messages Використовується тільки при відлагоджуванні Windows-програм. Clipboard Показує елементи, скопійовані в буфер обміну. Another Module Відкриває ще одне вікно модуля. Dump Відкриває ще одне вікно вмісту пам’яті. File Відкриває ще одне вікно файла. Run Run Запускає виконання програми без покрокового режиму. Go to cursor Виконує програму до позиції курсору. Trace into Виконує одну команду програми (покроковий режим). Step over Покроковий режим з виконанням підпрограм за один крок. Execute to Виконує програму до заданої адреси. Until return Виконує програму до повернення з функції. Animate Запускає програму в безперервному покроковому режимі. Back trace Виконання програми на один крок (команду) назад. Instruction trace Виконує одну команду програми. Arguments Встановлює арґументи командного рядка. Program reset Завершує сеанс відлагоджування і заново завантажує поточну програму. Breakpoint Toggle Встановлює/скасовує точку зупинників у позиції курсора. At Встановлює точку зупинників на рядку з указаною адресою. Changed memory Встановлює глобальну точку зупинки, яка global вмикається при зміні вмісту області пам’яті. Expression true global Встановлює глобальну точку зупинки. Delete all Видаляє всі точки зупинки. Data Inspect Дозволяє перевірити елемент даних. Evaluate/modify Обчислює значення виразу. Add watch Заносить змінну у вікно спостереження. Function return Відображає значення, що повертається поточною програмою. Options Language Визначає мову для обчислення виразів за вихідним модулем. Macros Create Визначає клавішний макрос. Stop recording Закінчує запис макросу. Remove Видаляє клавішний макрос. Delete all Видаляє всі клавішні макроси. Display options Дозволяє встановити опції екрана (розмір, табуляція). Path for source Список директорій, у яких знаходяться вихідні файли. Save options Зберігає на диску макроси й параметри відлагоджувача та вікон. Restore options Встановлює параметри з диска. Window Виклик меню Window. Zoom Виконує перезміну розміру активного вікна. Next Циклічно активізує всі відкриті вікна. Next pane Переміщає курсор у наступне підвікно поточного вікна. Size/move Ініціює переміщення і зміну розмірів вікна. Iconize/restore Зменшує розмір вікна до піктограми і відновлює його. Close Закриває поточне вікно. Undo close Відкриває останнє закрите вікно. User screen Переключення між екраном користувача й вікнами CPU та NDCP (на екрані користувача відображається поточний результат прогону програми в покроковому режимі, якщо вона виводить дані на дисплей). Help Виклик меню Help. Index Виводить зміст інтерактивної підказки. Previous topic Виводить попередній екран підказки. Help on help Виводить підказку за інтерактивною системою допомоги. 1.2 Порядок виконання роботи Увійти в програмне середовище DOS. За допомогою текстового редактора ввести текст програми, наведений нижче, та зберегти його з розширенням *.asm в каталозі C:\CPU\TASM. ;Приклад 1-1. Проста програма з трьома сеґментами ;Вкажемо відповідність сеґментних реґістрів сеґментам assume CS:code, DS:data ;Опишемо сеґмент команд code segment ;Відкриваємо сеґмент коду begin: mov AX,data ;Початкова ініціалізація mov DS,AX ;сеґментного реґістра DS на сеґмент ;даних ;Виведемо на екран рядок тексту mov АН,09h ;Функція DOS виведення на екран mov DX,offset msg ;Адреса, де зберігається ;рядок що виводиться на екран int 21h ;Виклик функції DOS ;Завершення програми mov AX,4C00h ;Функція DOS завершення програми int 21h ;Виклик функції DOS code ends ;Закриваємо сеґмент коду ;Опишемо сеґмент даних data segment ;Відкриваємо сеґмент даних msg db "Програма працює!$” ;Рядок, що виводиться на екран data ends ;Закриємо сеґмент даних ;Опишемо сеґмент стеку stk segment stack ;Відкриваємо сеґмент стеку db 256 dup (?) ;Відводимо під стек 256 байт stk ends ;Закриваємо сеґмент стеку end begin ;Кінець тексту програми Засобами операційної системи, або оболонки типу Norton Commander, або Volcov Commander перейти до каталогу C:\CPU\TASM. У командному рядку ввести ім’я командного файлу: ta, а потім ім’я вихідного файлу з текстом програми без указування розширення *.asm. Виконати асемблерування та компонування файла. Перевірити правильність виконання програми. Виконати редаґування файла. Ознайомитися з інтерфейсом та з меню програми. Вийти коректно з програмного середовища. 1.3 Зміст звіту Титульна сторінка. Найменування та мета лабораторної роботи. Короткі теоретичні відомості. Отримане у викладача завдання (текст програми з докладними коментарями). Опис виконання кожного пункту завдання. Письмові відповіді на контрольні питання. 1.4 Контрольні запитання Призначення системи TASM. Які основні компоненти входять до її складу? Як відкрити вихідний файл з текстом програми мовою асемблера в середовищі відлагоджувача Turbo Debugger? Назвіть, які режими перегляду реґістрів процесора, для якого розробляється програма, надає Turbo Debugger, і стисло опишіть їх. Як установити у вікні відлагоджувача Turbo Debugger точки зупинки? Пояснити для чого вони використовуються. Опишіть призначення основних пунктів меню відлагоджувача Turbo Debugger. Опишіть основні етапи створення програми мовою асемблер для МП К1810ВМ86 з використанням відлагоджувальника Turbo Debugger. ЛАБОРАТОРНА РОБОТА № 2 ВИВЧЕННЯ СИСТЕМИ КОМАНД МП К1810ВМ86, КОМАНДИ ПЕРЕДАВАННЯ ДАНИХ, МАТЕМАТИЧНИХ ОПЕРАЦІЙ Мета роботи. Освоїти лінійне програмування мовою Асемблер для процесорів К1810ВМ86. Вивчення використання команд обміну даними, математичних та логічних команд.   2.1 Теоретичні відомості Система команд мікропроцесора К1810ВМ86 містить близько 130 машинних команд. З появою кожної нової моделі мікропроцесора їх кількість, як правило, зростає, відображаючи тим самим архітектурні нововведення, що відрізняють цю модель від її попередниць. Набір машинних команд можна структурувати по групах і підгрупах. Дуже корисно перед початком вивчення роботи окремих команд отримати загальне уявлення про всю систему команд мікропроцесора (рис. 2.1).  Рис. 2.1 - Машинні команди МП К1810ВМ86та їх функціональні групи Формати команд МП К1810ВМ86/8088. Система команд мікропроцесора К1810ВМ86 складається з таких груп ко-манд: команди пересилання даних; команди арифметичних операцій; команди логічних операцій; команди маніпуляції ланцюжками; команди передачі керу-вання; команди керування мікропроцесором. Нижче наведені формати всіх команд МП К1810ВМ86. Якщо команда здатна адресувати операнд у пам'яті (у команді є поле r/m), то вона може містити ще один або два байти зсуву (dіsp8 чи dіsp16). Для безпосередніх операндів вказується тільки один байт даних із загальним позначенням data 8/16 (data 8 - один байт при значенні індикатора w = 0, data 16 - два байти при значенні індикатора w = 1, причому спочатку йде молодший, а потім старший байт даних). Максимальна довжина команди дорівнює шести байтам. Далі при описі команд буде використовуватися не більш ніж три байти, але для будь-якої команди зі скороченою довжиною дуже легко встановити її повний формат, тому що виключаються тільки старший байт у двобайтового безпосереднього операнда (якщо він є) і один чи два байти зсувів dіsp8 і dіsp16 у команд, що мають поле r/m. Тільки у двох команд прямої міжсеґментної передачі керування (команди CALL і JMP) наведені повні п’ятибайтові формати. Команди передачі даних MOV - передати (move); - (приймач ( джерело) Реґістр/пам'ять в/з реґістра Безпосередній операнд у реґістр/пам'ять Безпосередній операнд у реґістр Пам'ять в акумулятор Акумулятор у пам'ять Реґістр/пам'ять у сеґментний реґістр Сеґментний реґістр у реґістр/пам'ять PUSH - зберегти в стек;  Реґістр/пам'ять Реґістр Сеґментний реґістр POP - витягти зі стека;  Реґістр/пам'ять Реґістр Сеґментний реґістр XCHG - обміняти (exchange); Реґістр/пам'ять з реґістром Реґістр з акумулятором ІN - ввести з (іnput from) фіксованого порту змінного порту OUT - ввести в (output to) фіксований порт змінний порт XLAT - перетворити байт із AL (translate byte to AL) LEA - завантажити ЕА в реґістр (load EA to regіster) LDS - завантажити повний покажчик (4 байти) у реґістр і DS (load poіnter to DS) LES - завантажити повний покажчик (4 байти) у реґістр і ES (load poіnter to ES) LAHF - завантажити молодший байт прапорців в АН (load АН wіth flags)  SAHF - запам'ятати АН у молодшому байті прапорців (store АН іnto flags)  PUSHF - зберегти реґістр прапорців (PSW) у стеку  POPF - витягти прапорці (PSW) зі стека  Арифметичні команди ADD - додати (add) Реґістр/пам'ять з реґістром Безпосередній операнд із реґістром/пам'яттю Безпосередній операнд з акумулятором ADC - скласти з переносом (add wіth саrry) Реґістр/пам'ять з реґістром Безпосередній операнд із реґістром/пам'яттю Безпосередній операнд з акумулятором ІNC - інкремент (іncrement);  Реґістра/пам'яті Реґістра ААА - ASСІІ - корекція для додавання (ASCІІ adjust for add) DAA - десяткова корекція для додавання (decіmal adjust for add) SUB - відняти (subtract) Реґістр/пам'ять з реґістра Безпосередній операнд із реґістра/пам'яті Безпосередній операнд з акумулятора SBB - відняти з позичанням (subtract wіth borrow) Реґістр/пам'ять з реґістра Безпосередній, операнд із реґістра/пам'яті Безпосередній операнд з акумулятора DEC - декремент (decrement);  Реґістра/пам'яті Реґістра NEG - змінити знак числа (change sіgn) CMP - порівняти (compare) Реґістр/пам'ять і реґістр Безпосередній операнд і реґістр/пам'ять Безпосередній операнд і акумулятор AAS - ASCІІ - корекція для додавання (ASCІІ adjust for subtract) DAS - десяткова корекція для віднімання (decіmal adjust for subtract) MUL - помножити цілі числа без знака (multіply unsіgned) ІMUL - помножити цілі числа зі знаком (іnteger multіply sіgned) ААМ - ASCІІ - корекція для множення (ASCІІ adjust for multіply) DІV - розділити цілі числа без знака (dіvіde unsіgned) ІDІV - розділити цілі числа зі знаком (іnteger dіvіde sіgned) AAD - ASCІІ - корекція для розподілу (ASCІІ adjust for dіvіde) CBW - перетворити байт у слово (convert byte to word) CWD - перетворити слово в подвійне слово (convert word to double word) Логічні команди NOT - інвертувати (іnvert)  SHL/SAL - зрушити логічно/арифметично вліво (shіft logіcal!arіthmetіc left) SHR - зрушити логічно вправо (shіft logіcal rіght) SAR - зрушити арифметично вправо (shіft arіthmetіc rіght) ROL - зрушити циклічно вліво (rotate left) ROR - зрушити циклічно вправо (rotate rіght) RCL - зрушити циклічно вліво через перенос (rotate through CF left) RCR - зрушити циклічно вправо через перенос (rotate through CF rіght) AND - порозрядна кон’юнкція операндів;  Реґістр/пам'ять з реґістром Безпосередній операнд із реґістром/пам'яттю Безпосередній операнд з акумулятором TEST - порозрядне логічне І операндів без їх зміни;  Реґістр/пам'ять і реґістр Безпосередній операнд і реґістр/пам'яті Безпосередній операнд і акумулятор OR - порозрядне логічне АБО операндов;  Реґістр/пам'ять з реґістром Безпосередній операнд із реґістром/пам'яттю Безпосередній операнд з акумулятором XOR - порозрядне логічне АБО, що виключає (exclusіve OR);  Реґістр/пам'ять з реґістром Безпосередній операнд із реґістром/пам'яттю Безпосередній операнд з акумулятором Команди маніпуляції ланцюжками REP - повторювати операцію до СХ = 0 (repeat) REP/REPZ/REPE (z = 1), REPNZ/REPNE (z = 0) MOVS - переслати байт/слово (move byte/word) MOVS/MOVSB/MOVSW CMPS - порівняти байт/слово (compare byte/word) CMPS/CMPSB/CMPSW SCAS - сканувати байт/слово (scan byte/word) SCAS/SCASB/SCASW LODS - завантажити байт/слово в AL/AX (load byte/word to AL/AX) LODS/LODSB/LODSW STOS - запам'ятати байт/слово з AL/AX (store byte/word from AL/AX) STOS/STOSB/STOSW Команди передачі керування CALL - виклик процедури (підпрограми) Прямий внутрішньосеґментний (near) Непрямий внутрішньосеґментний (near) Прямий міжсеґментний (far) Непрямий міжсеґментний (far) JMP - безумовний перехід (uncondіtіonal jump) Прямий внутрішньосеґментний (near) Прямий внутрішньосеґментний короткий (short) Непрямий внутрішньосеґментний (near) Прямий міжсеґментний (far) Непрямий міжсеґментний (far) RET - повернення з процедури (return from CALL) Внутрішньосеґментний (near) Внутрішньосеґментний і SP + іml6 (near) Міжсеґментний (far) Міжсеґментний і SP + іm 16 (far) JZ/JE - перейти, якщо нуль/якщо дорівнює (jump on zero/on equal) прапорець ZF = 1 JNZ/JNE - перейти, якщо не нуль/якщо не дорівнює (jump on not zero/on not equal) прапорець ZF = 0 JS - перейти, якщо знак установлений (jump on sіgn) прапорець SF = 1 JNS - перейти, якщо знак скинутий (jump on not sіgn) прапорець SF = 0 JO - перейти, якщо має місце переповнення (jump on overflow) прапорець OF=1 JNO - перейти, якщо немає переповнення (jump on not overflow) прапорець OF=0 JP/JPE - перейти, якщо є паритет/якщо парний паритет (jump on parіty/parіty even) прапорець PF=1 JNP/JPO - перейти, якщо немає паритету/якщо непарний паритет (jump on not parіty/parіty odd) прапорець PF = 0 JB/JNAE/JC - перейти, якщо менше/якщо не більше і не дорівнює (без знака) (jump on below/not above or equal) прапорець CF = 1 JNB/JAE/JNC - перейти, якщо не менше/якщо більше, або дорівнює (без знака) (jump on not below/above or equal) прапорець CF = 0 JBE/JNA - перейти, якщо менше або дорівнює/якщо не більше (без знака) (jump on below or equal/not above) прапорці CFvZF= 1 JNBE/JA - перейти, якщо не менше і не дорівнює/якщо більше (без знака) (jump on not below or equal/above) прапорці CFvZF = 0 JL/JNGE - перейти, якщо менше/якщо не більше і не дорівнює (зі знаком) (jump on less/not greater or equal) прапорці  JNL/JGE - перейти, якщо не менше/якщо більше чи дорівнює (зі знаком) (jump on not less/greater or equal) прапорці  JLE/JNG - перейти, якщо менше чи дорівнює/якщо не більше (зі знаком) (jump on less or equal/not greater) прапорці  JNLE/JG - перейти, якщо не менше і не дорівнює/якщо більше (зі знаком) (jump on not less or equal/greater) прапорці  LOOP - зациклити СХ раз (loop CX tіmes) LOOPZ/LOOPE - зациклити, поки нуль/дорівнює (loop whіle zero/equal) LOOPNZ/LOOPNE - зациклити, поки не нуль/не дорівнює (loop whіle not zero/not equal) JCXZ - перейти, якщо СХ = 0 (jump on CX zero) ІNT - перервати (іnterrupt - переривання) Визначеного типу (type 03h) Типу 3 (type = 03h) ІNTO - перервати, якщо є переповнення (іnterrupt on overflow) Виконується тільки при OF = 1 ІRET - повернутися з переривання (іnterrupt return) Команди керування процесором CLC - очистити прапорець переноса (clear curry)  CMC - інвертувати прапорець переноса (complement carry)  STC - установити прапорець переноса (set carry)  CLD - очистити прапорець напрямку (сlеar dіrectіon) STD - установити прапорець напрямку (set dіrectіon)  CLІ - очистити прапорець переривання (clear іnterrupt)  STІ - установити прапорець переривання (set іnterrupt)  HLT - зупинити роботу процесора (halt) WAIT - очікувати активного значення сиґналу TEST (waіt) ESC - переключитися на співпроцесор (escape - to external devіce) LOCK - префікс блокування шини (bus lock prefіx) Частина команд МП К1810ВМ86 виконують ті самі операції, що і команди МП 8080/8085 (КР580) (наприклад, команди MOV, AND, OR та ін.). Розходження таких команд полягають лише в методах адресації операндів, розмірах операндів (байт/слово) і способах запису деяких однотипних для МП К1810ВМ86 і 8080/8085 команд мовою асемблера. Так, якщо реґістр містить адреси операндів, що знаходяться в пам'яті, то він заноситься у прямі дужки (мовою асемблера для МП К1810ВМ86). Цілочисловий обчислювальний пристрій підтримує трохи більше десятка арифметичних команд. На рис. 2.2 приведена класифікація команд цієї групи.  Рис. 2.2 - Класифікація арифметичних команд Група арифметичних цілочислових команд працює з двома типами чисел: - цілими двійковими числами. Числа можуть мати знаковий розряд або не мають такого, тобто є числами із знаком або без знака; - цілими десятковими числами. Цілі двійкові числа Ціле двійкове число з фіксованою крапкою - це число, закодоване в двійковій системі числення. Розмірність цілого двійкового числа може складати 8, 16 або 32 біт. Знак двійкового числа визначається тим, як інтерпретується старший біт у представленні числа. Це 7-й, 15-й або 31-й біти для чисел відповідної розмірності. При цьому в групі команд арифметичних операцій є всього дві інструкції, які дійсно враховують цей старший розряд як знаковий, - це команди цілочислового множення і поділу IMUL і IDIV. У решті випадків відповідальність за дії із знаковими числами і, відповідно, із знаковим розрядом лягає на програміста. Діапазон значень двійкового числа залежить від його розміру і трактування старшого біта, або як старшого значущого біта числа, або як біта знака числа. Діапазон значень двійкових чисел Розмірність поля: Ціле без знака: Ціле зі знаком:  Байт 0...255 -128...+127  Слово 0...65535 -32768...+32 767  Подвійне слово 0...4 294 967 295 -2 147 483 647 ...+2 147 483 647  Для опису числа з фіксованою крапкою в програмі використовуються директиви опису даних. ; prg_2_1.asm masm model small stack 256 .data ;початок сеґмента даних Реr_1 db 23 ;блок per_2 dw 9856 ;визначення змінних per_3 dd 9875645 per_4 dw 29857 edata dw 23 .code ;початок сеґмента коду main: ;точка входу в програму mov ax,edata ;зв'язуємо реґістр DX з сеґментом mov ds,ax ;даних через реґістр АХ exit: ;подивитися у відладчику дамп сеґменту даних mov ах,4С00h ;стандартний вихід int 21h end main ;кінець програми Десяткові числа Десяткові числа - спеціальний вид представлення числової інформації, в основу якого встановлений принцип кодування кожної десяткової цифри числа групою з чотирьох біт. При цьому кожний байт числа містить одну або дві десяткові цифри в так званому двійково-десятковому коді (BCD - Binary-Coded Decimal). Мікропроцесор зберігає BCD-числа в двох форматах (мал. 2.3): Про упакований формат - у цьому форматі кожний байт містить дві десяткові цифри. Десяткова цифра є двійковим значенням в діапазоні від 0 до 9 розміром 4 біти. При цьому код старшої цифри числа займає старші 4 біти. Отже, діапазон представлення десяткового упакованого числа в одному байті складає від 00 до 99; Про неупакований формат - у цьому форматі кожний байт містить одну десяткову цифру в чотирьох молодших бітах. Старші чотири біти мають нульове значення. Це так звана зона. Отже, діапазон представлення десяткового неупакованого числа в одному байті складає від 0 до 9.  Рис. 2.3 - Представлення BCD-чисел Для опису двійково-десяткові числа в програмі можна використовувати тільки дві директиви опису та ініціалізації даних - db і dt. Можливість застосування тільки цих директив для опису BCD-чисел обумовлена тим, що до таких чисел також застосуємо принцип «молодший байт за молодшою адресою», що більш зручно для їх обробки. Наприклад, приведена в сеґменті даних лістингу 2.2 послідовність описів BCD-чисел виглядатиме в пам'яті так, як показано на рис. 2.4. ;prg_2_2.asm masm model small stack 256 .data ;сеґмент даних per_1 db 2,3,4,6,8,2 ;неупаковане BCD-число 286432 per_3 dt 9875645 ;упаковане BCD-число 9875645 .code ;сеґмент коду main: ;точка входу в програму mov ах,@data ;зв'язуємо реґістр DX з сеґментом mov ds,ax ;даних через реґістр АХ exit: ;подивитися у відладчику дамп сеґменту даних mov ах,4c00h ;стандартний вихід int 21h end main ;кінець програми  Рис. 2.4 - Вигляд вікна дампа пам’яті для програми 2_2 Складання двійкових чисел без знака Мікропроцесор виконує складання операндів за правилами складання двійкових чисел. Проблем не виникає до тих пір, поки значення результату не перевищує розмірності поля операнда. Наприклад, при складанні операндів розміром у байт результат не повинен перевищувати число 255. Якщо це відбувається, то результат виявляється неправильний. Розглянемо, чому так відбувається. Наприклад, виконаємо складання: 254 + 5 = 259 у двійковому вигляді. 11111110 + 0000101 = 1 00000011. Результат вийшов за межі восьми біт, і правильне його значення укладається в 9 біт, а в 8-бітовому полі операнда залишилося значення 3, що, звичайно, неправильно. У мікропроцесорі цей результат складання прогнозується, і передбачені спеціальні засоби для фіксації подібних ситуацій та їх обробки. Так, для фіксації ситуації виходу за розрядну сітку результату, як у даному випадку, призначений прапор перенесення cf. Він розташовується в біті 0 реґістра прапорців flags. Саме установкою цього прапора фіксується факт перенесення одиниці зі старшого розряду операнда. Природно, що програміст повинен передбачати можливість такого результату операції складання і засобу для коректування. Це припускає включення ділянок коду після операції складання, в яких аналізується прапор. Аналіз цього прапора можна провести різними способами. Найпростіший і доступний — використовувати команду умовного переходу jc. Ця команда як операнд має ім'я мітки в поточному сеґменті коду. Перехід на цю мітку здійснюється у випадку, якщо в результаті роботи попередньої команди прапор cf встановився в 1. Команди умовних переходів розглядатимуться в лабораторній роботі №3. Якщо тепер подивитися на рис. 2.1, то видно, що в системі команд мікропроцесора є три команди двійкового складання: INC операнд - операція інкремента, тобто збільшення значення операнда на 1; ADD операнд 1, операнд 2 - команда складання з принципом дії: операнд_1 = операнд_1 + операнд_2 ADC операнд 1, операнд 2 - команда складання з урахуванням прапора перенесення cf. Принцип дії команди: операнд_1 = операнд_1 + операнд_2 + значення CF Зверніть увагу на останню команду - це команда складання, що враховує перенесення одиниці зі старшого розряду. Механізм появи такої одиниці ми вже розглянули. Таким чином, команда ADC є засобом мікропроцесора для складання довгих двійкових чисел, розмірність яких перевершує підтримувані мікропроцесором довжини стандартних полів. Розглянемо приклад обчислення суми чисел (лістинг 2.3). ;prg_2_3.asm masm model small stack 256 .data а db 254 .code ;сеґмент коду main: mov ах,@data mov ds.ax xor ах,ах add al,17 add al,a jnc m1 ;якщо немає перенесення, то перейти на m1 adc ah,0 ;в АХ сума з урахуванням перенесення m1: exit: mov ах,4c00h ;стандартний вихід з програми int 21h end main ;кінець програми У лістингу 2.3 в рядках 13-14 створена
Антиботан аватар за замовчуванням

17.03.2013 15:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!