Програмування в машинних кодах і на мові асемблера - перші кроки в машинних кодах -

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.

Русифікація - русифікація заміною генератора. Русифікація "під принтер" і "під друкарську машинку".

Корисні поради - кілька практичних рекомендацій, пов'язаних з русифікацією комп'ютера.

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

Схожі статті