3. Архітектура процесора Z -80.
У структуру процесора входять кілька регістрів. Саме з ними ми і працюємо, програмуючи в машинному коді. Розглядайте ці регістри як осередку внутрішньої пам'яті процесора. Якщо з осередків постійної пам'яті комп'ютера (ПЗУ) можна тільки зчитувати інформацію, а при роботі з оперативною пам'яттю (ОЗУ) інформацію можна як записувати, так і зчитувати, то при роботі з регістрами можна ще виробляти велику кількість різних арифметичних і логічних операцій над вмістом регістрів .
F, A, B, C, D, E, H, L, SP, PC, IX, IY, I, R.
Це основний набір регістрів. Є ще один додатковий набір, його називають альтернативним, його ми і розглянемо нижче.
Деякі з цих регістрів - восьмирозрядні (однобайтні) і можуть містити цілі числа від 0 до 255. Це регістри F, A, B, C, D, E, H, L, I, R.
Інші - шестнадцатіразрядного (двухбайтное). Вони можуть містити цілі числа від 0 до 65535. Це регістри SP, PC, IX, IY.
Деякі однобайтні регістри можуть об'єднуватися в двох байтниє реєстрові пари BC, DE, HL. У цьому випадку про такий парі можна говорити як про окремий шестнадцатіразрядного регістрі.
Процесор Z-80 є дуже асиметричним процесором, тобто кожен регістр має специфічні риси, що роблять його не схожим на інші, і різні регістри призначені для виконання різних функцій.
Розглянемо регістри основного набору.
Регістр А - акумулятор.
Цей регістр називають акумулятором, тому що в багатьох випадках результат виконання операції залишається в ньому. У цьому регістрі виконується найбільша кількість арифметичних і логічних команд. Це основний однобайтном регістр процесора. У багатьох командах навіть не вказується, до якого регістру вони відносяться: передбачається, що вони відносяться до регістру А.
Регістри B, C, D, E, H, L - регістри загального призначення.
Ці регістри досить широко використовуються процесором при виконанні різних команд. Їх характерна особливість полягає в тому, що вони можуть використовуватися і як однобайтні поодинокі регістри і як двухбайтное шестнадцатіразрядного реєстрові пари: BC, DE, HL.
В цьому випадку найбільшу кількість команд має регістр HL. При роботі з двухбайтное цілими числами він має таке ж важливе значення, що і регістр А при роботі з однобайтном.
До регістру DE підходить скорочення від слова destination ( «місце призначення»). І дійсно, у багатьох операціях, пов'язаних з переміщенням чогось куди-небудь, регістр HL вказує, звідки взяти, а регістр DE - куди відправити.
До регістру BC можна підібрати скорочення back counter ( «зворотний лічильник»). У тих випадках, коли певна послідовність команд повинна повторитися n раз, тобто коли організовується цикл обчислень, в регістрі BC зберігається лічильник цього циклу.
При об'єднанні одиночних регістрів в пари, в першому зберігається старший байт, а в другому - молодший. Отже, B, D, H - старший, а C, E, L - молодший. Для тих, хто трохи знає англійську мову, нагадуванням буде назва регістра HL. Спочатку H - high ( «старший»), а потім L - low ( «молодший»).
Регістр SP - покажчик стека (stack pointer).
У тих випадках, коли необхідно на деякий час звільнити будь-якої регістр (або регістри) і запам'ятати його вміст до подальшого використання, комп'ютер може використовувати в якості місця тимчасового зберігання даних особлива ділянка оперативної пам'яті, званий машинним стеком. Зверніть увагу на слово «машинний». Бувають і інші стеки, наприклад, стек калькулятора або, скажімо, призначений для користувача стек, який Ви створите самі для своїх власних потреб, але про це мова ще попереду, а поки поговоримо про машинному стеку. Стек - це така форма організації пам'яті, при якій завантаження і вивантаження даних виконується за принципом LIFO (last in first out - «останнім прийшов - першим підеш»).
Регістр PC - програмний лічильник (program counter).
Регістр F - регістр прапорів.
Цей регістр відрізняється від усіх. Його не розглядають як окремий регістр, який зберігає восьмирозрядному число, а скоріше, як вісім окремих прапорів - бітів. Кожен прапор може бути встановлений або знято, тобто відповідний біт, включений (дорівнює 1) або вимкнений (дорівнює 0). Нижче показана структура регістра прапорів:
· Біт 1 - прапор складання / віднімання N;
· Біт 2 - прапор переповнення / парності P / V
· Біт 3 - не використовується;
· Біт 4 - прапор полупереноса H;
· Біт 5 - не використовується;
· Біт 6 - прапор нуля Z;
· Біт 7 - прапор знака S.
Прапори C. P / V. Z. S - активно використовуються в різних командах. Ми розглянемо роботу з цими прапорами в розділі 5.9.5.
Прапори N і H програмістом не використовуються. Вони беруть участь при виконанні операцій з десятковими числами, вираженими двійковій формою. Про це ми поговоримо в наступному розділі.
Регістри IX, IY - індексні регістри.
Регістр R - регістр регенерації.
Це внутрішній системний регістр, який використовується процесором автоматично, без участі програміста. Електричні заряди в мікросхемах оперативної пам'яті мають тенденцію «витікати», тому для нормальної роботи комп'ютера необхідно проводити підзарядку (регенерацію) оперативної пам'яті. З цією метою і використовується регістр R.
Регістр I - вектор переривань.
Для комп'ютерів інших систем, зібраних на базі процесора Z-80, цей регістр використовується для організації обміну з периферійними пристроями. У «Спектрум» ця можливість не використовується, і цей регістр бере участь тільки в формуванні телевізійного сигналу.
Альтернативний набір регістрів.
Однією з відмінних рис процесора Z-80 є наявність альтернативного набору регістрів. Ці регістри F ', A', B ', C', D ', E', H ', L'. Вони повністю ідентичні регістрів F, A, B, C, D, E, H, L.
Наявність такого альтернативного набору дозволяє швидко перемикатися з одного набору на інший. Коли потрібно зробити якісь операції з регістрами загального призначення, а вони вже зайняті і втратити містяться в них дані не можна, перед Вами є три шляхи:
1. Надіслати вміст в пам'ять, а потім повернути його назад.
2. Помістити вміст на стек, а потім повернути його звідти.
3. Переключитися на альтернативний набір регістрів і працювати з ним, а потім переключитися назад на основний набір.
Третій шлях найоперативніший.
Завдяки наявності альтернативного набору процесор може одночасно обслуговувати два завдання. У той час, коли Ви переключилися на альтернативний набір, він стає основним, а колишній основним - стає альтернативним. Фізично ці набори абсолютно ідентичні і тому немає ніяких програмних засобів, щоб визначити, з яким саме набором Ви в даний момент працюєте. Програма може бути надто хитросплетеної і від програміста потрібна певна уважність.
Перші кроки в машинних кодах - Самий - найперший крок.
Перші кроки в машинних кодах - Навіщо вивчати програмування в машинних кодах.
Перші кроки в машинних кодах - Архітектура процесора Z-80.
Форми представлення чисел в процесорі Z-80 - Числові системи. Двійкова додаткова форма запису. Десяткова арифметика в довічним вираженні.
Арифметичні і логічні команди - Команди складання. Команди віднімання. Команди порівняння. Команди логіки.
Операції розгалуження - Команди переходу. Операції в циклі. Команди роботи зі стеком. Виклик підпрограм.
Команди звернення до ПЗУ - Точки запуску в ПЗУ. Опис вбудованої калькулятора.
Команди для роботи з бітами - команди зсуву, ротації і перевірки бітів.
Оперативна пам'ять - Команди обробки блоків пам'яті.
Введення-виведення - Команди для роботи з зовнішніми пристроями.
Переривання - опис системи переривань процесора Z80.
Інші команди - опис специфічних команд процесора Z80.
Висновок - закінчення першої частини книги і примітки до неї.
Частина II - "Практикум з програмування в машинних кодах". Вступ.
Особливості процесора Z80 - кілька сторінок короткого повторення матеріалу 1-ої частини, розгляд основних особливостей процесора.
Розширення системи команд процесора - арифметичні конструкції.
Розширення системи команд процесора - логічні конструкції.
Розширення системи команд процесора - конструкції передачі даних.
Розширення системи команд процесора - конструкції розгалуження.
Розширення системи команд процесора - конструкції виклику підпрограм і повернення. Інші конструкції.
Розбір програм в машинних кодах - висновок на бордюр кольорових смуг.
Розбір програм в машинних кодах - висновок даних на екран з машинного коду.
Розбір програм в машинних кодах - управління програмою від Кемпстон-джойстика.
Розбір програм в машинних кодах - управління програмою від клавіатури.
Розбір програм в машинних кодах - перевірка оперативної пам'яті комп'ютера.
Розбір програм в машинних кодах - практичні прийоми роботи з калькулятором.
Розбір програм в машинних кодах - приклади використання переривань 2-го роду.
Канали і потоки - стандартні канали. Інші канали. Область інформації про каналах. Підключення потоків. Практичні прийоми роботи з каналами і потоками.
Додаток 2 - огляд типових помилок, що виникають при програмуванні в машинних кодах.
Частина III - довідник з програмування в машинних кодах. Вступ.
Система команд - зведена таблиця значень кодів від 0 до 255 для Бейсік і Ассемблера.
Система команд - таблиця значень кодів для Ассемблера.
Таблиця 3 - система команд вбудованого калькулятора.
Словник мнемонік асемблера - все мнемоніки машинного коду процесора Z-80 в алфавітному порядку.
Таблиця 5 - таблиця покажчиків переривань з ПЗУ.
Русифікація - русифікація з використанням символів UDG.
Русифікація - русифікація заміною генератора. Русифікація "під принтер" і "під друкарську машинку".
Корисні поради - кілька практичних рекомендацій, пов'язаних з русифікацією комп'ютера.
Висновок - дякуємо Вам за увагу, проявлену до нашої книзі. Якщо Ви прочитали її до кінця і все в ній Вам зрозуміло, то Ви зробили великий крок вперед, але все ж це тільки найперший крок.