Презентация лекции 09_new.pptx
- Количество слайдов: 28
Архітектура ПК. Мова Assembler
Асемблер n n Асемблер є символічним аналогом машинної мови. Із цієї причини програма, написана на Асемблері, повинна відображати всі особливості архітектури мікропроцесора: організацію пам'яті, способи адресації операндів, правила використання регістрів і т. ін. Через необхідність обліку подібних особливостей Асемблер унікальний для кожного типу мікропроцесорів. Програма на Асемблері являє собою сукупність блоків пам'яті, які називаються сегментами пам'яті. Програма може складатися з одного або декількох таких блоків-сегментів. Кожний сегмент містить сукупність речень мови, кожне з яких займає окремий рядок коду програми.
Двійкові коди n n Будь-яка інформація (числа, команди, записи тощо) представлена у пам’яті комп’ютера у вигляді двійкових кодів фіксованої або змінної довжини. Окремі елементи двійкового коду, що мають значення 0 або 1, називають розрядами, або бітами. Двійковий код, складений із 8 розрядів, має назву байта. Для запису чисел також використовують 16 -розрядний формат (машинне слово), 8 -розрядний формат (півслово) і 32 -розрядний формат (подвійне слово). Числа представлені двійковими комбінаціями відповідно до числових форматів, узятих для роботи в даному комп’ютері, символьний код встановлює відповідність літер та інших символів двійковим комбінаціям.
Слова n Слово (word) - це два сусідні байти. Розмір слова - 16 розрядів. Вони нумеруються, якщо розглядати слово як єдине ціле, справа наліво від 0 до 15. Адресою слова вважається за визначенням адреса його першого байта (з меншою адресою). Подвійне слово (double word) - це чотири сусідні байти або, що те ж саме, два сусідні слова. Розмір подвійного слова - 32 розряди, вони нумеруються справа наліво від 0 до 31. Адреса подвійного слова - адреса першого з його байтів (з найменшою адресою).
тетраслово n тетраслово - послідовність з восьми байт (64 біта), розташованих за послідовними адресами. Нумерація біт здійснюється від 0 до 63. Двійчасте слово, що містить нульовий біт, називається молодшим двійчастим словом, а двійчасте слово, що містить 63 -й біт, — старшим двійчастим словом. Молодше двійчасте слово зберігається за меншою адресою. Адресою тетраслова вважається адреса його молодшого двійчастого слова.
Представлення чисел в ПК ØПрямий код — метод представлення двійкових чисел з фіксованою комою в комп’ютерній арифметиці. Використовується для запису додатних чисел ØЗворотній код — метод представлення , який дозволяє відняти одне число з другого, використовуючі тілько операцію складання над натуральними числами. ØДодатковий код — найбільш росповсюджений спосіб представлення від’ємних цілих чисел в ПК. Дозволяє замінювати операцію віднімання операцією складання і робити операції складання і віднімання однаковими для знакових і беззнакових чисел, що спрощує архітектуру ЕОМ.
Прямий код При запису числа в прямому коді старший разряд є знаковим розрядом. Якщо його значення дорівнює 0 — тоді число додатнє, якщо 1 — то від’ємне. В інших розрядах (які називають цифровими розрядами) записуються двійкові представлення модулю числа. Використовується головним чином для запису додатних цілих чисел. Недоліки: ØВ прямому коді є два варіанти запису числа 0 (наприклад, 0000 и 10000000 в восьмиразрядному представленні).
Прямий код Приклад: Якщо для запису кода виділено один байт, то для числа +1101 прямий код 0|0001101 для числа -1101 прямий код 1|0001101.
Зворотній код (доповнення до 1) двійкового числа отримують заміною всіх його одиниць на нули, а нулів на одиниці. Зворотній n-розрядний двійковий код додатнього цілого числа складається з однорозрядного коду знака (двійкової цифри 0), за якою слідує n − 1 -розрядне двійкове представлення модулю числа (зворотній код додатнього числа співпадає с прямим кодом). Є два зворотніх кода числа 0: «додатній нуль» 00000 та «від’ємний нуль» 11111 (наведені 10 -розрядні зворотні коди). n-розрядний зворотній код дозволяє уявити числа от − 2 n − 1 + 1 до + 2 n − 1.
Зворотній код Приклад: Для чиcла +1101: прямий код 0|0001101 зворотній код 0|0001101 Для чиcла -1101: прямий код 1|0001101 зворотній код 1|1110010
Додатковий код (доповнення до 2) двійкового числа отримується добавленням 1 до молодшого значащего розряду його доповнення до 1. Переваги: Ø Один и той же регістр може зберігати как n-бітове додатнє число, так і (n− 1)-бітове число зі знаком, з спільними для обох форматами, в операциях складання, віднімання і лівого здвигу. Ø Більш удобна упаковка чисел в бітові поля. Ø Відсутність числа «мінус нуль» . Недоліки: Ø В складних форматах (таких, як плаваюча кома або двійководесятичний код) большість переваг аннулюються. Ø Модуль наибільшого числа не рівний модулю наименьшого числа. Приклад: знакове ціле 1 -байтове. Максимальне число: 12710 == 7 F 16 == 011111112. Мінімальне число: -12810 == 8016, додатковий код == 100000002, додатковий код. Ø Операція зміни знаку вимагає додаткової перевірки.
Дополнительный код Пример: Для числа +1101: Прямой код 0|0001101 Обратный код 0|0001101 Дополнительный код 0|0001101 Для числа -1101: Прямой код 1|0001101 Обратный код 1|1110010 Дополнительный код 1|1110011
Бітовий зсув n Бітовий зсув - зміна позицій бітів у слові на одну і ту ж величину. Більшість комп'ютерів не можуть напряму адресувати біти, які містяться групами по 8, 16, 32 або 64 бітів у словах. Для забезпечення роботи з бітами існує безліч машинних інструкцій, що включають різні типи зрушень. Всі зрушення схожі один на одного поведінкою середніх бітів, які просто зсуваються вліво або вправо на певну величину.
Зсув n Існує два види операцій зсуву вправо на рівні мови асемблера: арифметичний зсув дає Вам знакове розширення (те значення, яке було в крайньому лівому біті до зсуву, буде в ньому і після зсуву); логічний зсув заповнює лівий біт нулем.
ОПЕРАЦІЇ ЗСУВУ
Речення Асемблера бувають чотирьох типів: n n команди або інструкції - представляють собою символічні аналоги машинних команд. У процесі трансляції інструкції Асемблера перетворюються у відповідні команди системи команд мікропроцесора; макрокоманди - оформлені певним чином речення тексту програми, що заміщаються під час трансляції іншими реченнями; директиви - вказівки транслятору Асемблера на виконання деяких дій. У директив немає аналогів у машинному представленні; рядки коментарів - містять будь-які символи, у тому числі й літери російського або українського алфавіту. Коментарі ігноруються транслятором.
Перша програма: 1. 2. CSEG segment org 100 h 3. 4. Begin: (початок програми) 5. 6. 7. 8. mov ah, 9 (завантажуємо число 9 в регістр ah) mov dx, offset Message (в регістр dx завантажується адреса повідомлення) int 21 h (виклик переривання для виводу на екран, відпрацює функція для ah=9) 9. 10. int 20 h () (виклик переривання – виходу в ОС) 11. 12. Message db ‘Hello, world!$’ (повідомлення, слово message – назва, може бути будь якою) 13. 14. CSEG ends end Begin (кінець програми)
Регістри n n n Регістр – це спеціально відведена пам’ять для зберігання якогось числа. Наприклад, якщо ми хочемо скласти 2 числа: А=5 В=8 С=А+В То А, В та С будуть свого рода регістрами. А=5 слід читати як “А привласнити 5”
Переривання n Переривання – це свого роду підпрограмма ОС, яка постійно знаходиться в пам’яті і може викликатися в будь який час.
Регістри n Крім елементів оперативної пам'яті для зберігання даних (правда, короткочасного) можна використовувати і регістри - осередки, розташовані в центральному процесорі і доступні з машинних програм. Доступ до регістрів здійснюється набагато швидше, ніж до елементів пам'яті, тому використовування регістрів помітно зменшує час виконання програм. Всі регістри мають розмір слова (16 розрядів), за кожним з них закріплене певне ім'я (АХ, SP і т. п. ). За призначенням і способу використовування регістри можна розбити на наступні групи: • регістри загального призначення (АХ, ВХ, СХ, DX, SI, DI, BP, SP); • сегментні регістри (CS, DS, SS, ES); • покажчик команд (IP); • регістр прапорів (Flags).
Регістри загального призначення n n До цієї групи відносяться наступні 8 регістрів: Хоча назви багатьох з цих регістрів малоосмислені, все ж таки наведемо розшифровку цих назв: АХ accumulator, акумулятор; ВХ base, база; СХ counter, лічильник; DX data, дані; (буква X - від слова extended, розширений: у процесорі 8080 були байтові регістри А, В, З і D, але потім їх розширили до розміру слова) SI source index, індекс джерела; DI destination index, індекс приймача; ВР base pointer, покажчик бази; SP stack pointer, покажчик стека.
Регістри АХ, ВХ, СХ і DX n n n Регістри АХ, ВХ, СХ і DX влаштовані так, що можливий незалежний доступ до їх старшої і молодшої половин; можна сказати, що кожний з цих регістрів складається з двох байтових регістрів. Позначають ці половини буквами Н (high - вище, старший) і L (low - нижче, молодший) і першою буквою з назви регістра: АН і AL - в АХ, ВН і BL - у ВХ і т. д. (попередній слайд). Наприклад, з регістром АХ можна працювати так: можна записати в нього слово (16 бітів), потім можна рахувати тільки ліву половину цього слова (байт з АН), не прочитуючи праву половину, далі можна зробити запис тільки в AL, не міняючи АН. Таким чином, можливий доступ як до всього регістра АХ, так і до будь-якої його половини. Цілком регістр використовується при роботі з числами, а його половини - при роботі з частинами чисел або символами.
Сегментні регістри n Другу групу регістрів утворюють наступні 4 регістри, назви яких розшифровуються так: CS code segment, сегмент команд; DS data segment, сегмент даних; SS stack segment, сегмент стека; ES extra segment, додатковий сегмент. Ні в яких арифметичних, логічних і т. ін. операціях ці регістри не можуть брати участь. Можна тільки записувати в них і прочитувати з них, та і те тут є певні обмеження. Ці регістри використовуються для сегментації адрес, яка є різновидом модифікації адрес і яка використовується для скорочення розміру команд.
Покажчик команд Ще один регістр ПК - це регістр IP (instruction pointer, покажчик команд): У цьому регістрі завжди знаходиться адреса команди, яка повинна бути виконана наступною. Більш точно, в IP знаходиться адреса цієї команди, відлічена від початку сегменту команд, на початок якого указує регістр CS. Тому абсолютна адреса цієї команди визначається парою регістрів CS і IP. Зміна будь-якого з цих регістрів є ніщо інше, як перехід. Тому вміст регістра IP (як і CS) можна міняти тільки командами переходу.
Регістр прапорів n n n І, нарешті, в ПК є регістр прапорів. Прапор - це біт, що приймає значення 1 ("прапор встановлений"), якщо виконана деяка умова, і значення Про ("прапор скинутий") інакше. У ПК використовується 9 прапорів, причому конструктивно вони зібрані в один 16 -розрядний регістр, що званий регістром прапорів і позначається як Flags. Кожен прапор - це один з розрядів даного регістра (деякі розряди регістра не зайняті):
Прапори умов: n CF (carry flag) - прапор перенесення. Найбільш корисний в арифметичних операціях над числами без знаку; наприклад, якщо при складанні беззнакових чисел вийшла дуже велика сума - з одиницею перенесення, якій немає місця в осередку, тоді прапор CF приймає значення 1, а якщо сума "укладається" в розмір осередку, то значенням CF буде 0. OF (overflow flag) - прапор переповнювання. Корисний в арифметичних операціях над числами із знаком; наприклад, якщо при складанні або відніманні знакових чисел вийшов результат, по модулю перевершуючий допустиму величину (відбулося переповнювання мантиси), тоді прапор OF набуває значення 1, а якщо переповнювання мантиси не було - значення 0. ZF (zero flag) - прапор нуля. Встановлюється в 1, якщо результат команди виявився нульовим. SF (sign flag) - прапор знаку. Встановлюється в 1, якщо в операції над знаковими числами вийшов негативний результат.
Прапори умов і станів n PF (parity flag) - прапор парності. Рівний 1, якщо в 8 молодших бітах результату чергової команди міститься парна кількість двійкових одиниць. Враховується звичайно тільки в операціях введення-висновку. AF (auxiliary carry flag) - прапор додаткового перенесення. Фіксує особливості виконання операцій над двійково-десятковими числами. Прапори станів: DF (direction flag) - прапор напряму. Встановлює напрям проглядання рядків в рядкових командах: при DF=0 рядки є видимим "вперед" (від почата до кінця), при DF=1 - у зворотному напрямі. IF (interrupt flag) - прапор переривань. При IF=0 процесор перестає реагувати на поступаючі до нього переривання, а при IF=1 блокування переривань знімається. TF (trap flag) - прапор трасування. При TF=1 після виконання кожної команди процесор робить переривання, чим можна скористатися при відладці програми - для її трасування.
Представлення символьних даних n Як і будь-яка інша інформація, символьні дані повинні зберігатися в пам'яті ЕОМ в двійковому вигляді. Для цього кожному символу ставиться у відповідність деяке ненегативне число, зване кодом символу, і це число записується в пам'ять ЕОМ в двійковому вигляді. Конкретна відповідність між символами і їх кодами називається системою кодування. У ЕОМ, як правило, використовуються 8 -розрядні коди символів. Це дозволяє закодувати 256 різних символів, чого цілком достатньо для представлення багатьох символів, використовуваних на практиці. Тому для коду символу достатньо виділити в пам'яті один байт. Так і роблять: кожен символ представляється своїм кодом, який записують в один байт пам'яті. У ПК звичайно використовується система кодування ASCII (American Standard Code for Information Interchange - стандартний американський код для обміну інформації).
Презентация лекции 09_new.pptx