Автор работы: Пользователь скрыл имя, 15 Марта 2013 в 19:59, доклад
Після створення процесора 8086 фірма Intel розробила більш досконалі процесори об’єднані під назвою I 80x86, така назва означає, що всі команди мікропроцесора, які виконуються на молодших моделях обов’язково виконуються на старше, отже все ПЗ, які розроблені для процесора 8086 успішно будуть працювати і на останніх моделях 80486 і Pentium. Ми будемо розглядати процесори з точки зору програміста. Не дивлячись на різноманітність моделей процесорів, найбільш важливим з точки зору біології програмування є 8086 як базова модель і 80386 , як перший процесор фірми Intel, який в повному об’ємі реалізував принцип багатозадачності.
Assembler
Вступ.
Після створення процесора 8086 фірма Intel розробила більш досконалі процесори об’єднані під назвою I 80x86, така назва означає, що всі команди мікропроцесора, які виконуються на молодших моделях обов’язково виконуються на старше, отже все ПЗ, які розроблені для процесора 8086 успішно будуть працювати і на останніх моделях 80486 і Pentium. Ми будемо розглядати процесори з точки зору програміста. Не дивлячись на різноманітність моделей процесорів, найбільш важливим з точки зору біології програмування є 8086 як базова модель і 80386 , як перший процесор фірми Intel, який в повному об’ємі реалізував принцип багатозадачності.
Програмування на мові асемблера вважається складною задачею, причини цього такі:
Етапи створення програми.
Розробка програми на мові асемблера включає кілька етапів.
Ці етапи циклічно повторюються.
Підготовка лістінгу програми.
Текст програми на мові асемблера записується в один або кілька файлів, імена файлів і їх розширення можуть бути будь-які, прийнято для файлів які містять програми мовою асемблера прийнято використовувати розширення *.asm. Для файлів визначених констант і повних типів розширення *.inc. Ці файли є текстовими їх можна набрати в будь-якому текстовому редакторі. Можна також використати інтегровані середовища для розробки програм, при програмуванні зручно виділяти один каталог для збереження всіх файлів програми і звідти запускати всі необхідні програми для підготовки, асемблювання та компонування програми. При використанні стандартних редакторів тексту, редаговані тексти треба зберігати у вигляді звичайних файлів у форматі ASCII, це означає, що ці файли треба зберігати без додаткових символів, ці символи часто вставляють в текст різні спеціалізовані редактори, наприклад WORD.
Асемблювання програми.
Підготовлений текст мови асемблер є початковим для спеціальних програм, які називаються асемблерами, далі програма асемблера. Задача програми асемблера перетворити текст програми у форму двійкових команд, останні можуть вже бути виконанні мікропроцесором. Після асемблювання дістають так звані файли об’єктних модулів, які мають відповідні розширення *.obj. Для отримання об’єктних файлів необхідного виконати відповідну програму асемблера masm фірми Microsoft, або tasm фірми Borland. В обох випадках після команди вказується ім’я файлу : masm prog1.asm, tasm prog1.asm.
Така форма команди є мінімальною, крім цієї форми можна використовувати іншу форму задаючи перед іменем файлу опції або ключі. Якщо програма складається з декількох файлів, то їх асемблювання проводиться незалежно один від одного, хоча отримані об’єктні файли представлені вже в двійковій формі запускати їх на виконання не можливо.
Компоновка програми.
Текст програми може знаходитись в декількох файлах, змінні які описані в цих файлах можуть використовуватися спільно, якщо такі файли асемблюються окремо, то не можливо дістати повну інформацію, для того, щоб генерувати виконавчий код. Тому процес підготовки програми обов’язково включає в себе етап компоновки. На цьому етапі визначають всі невідомі, при окремому асемблювані, адреси всіх змінних або функцій, які використовуються спільно. Процес об’єднання об’єктних модулів в один файл виконується спец. програмою, яка називається компоновщиком. Це може бути програма link фірми Microsoft, або tlink фірми Borland, отримуваний виконуваний файл має розширення *.exe, або *.com. Компановщику треба передати імена відповідних об’єктних файлів.
Tlink prog1.obj prog2.obj
Після компонування отримується виконуваний файл, він отримує ім’я файла, який стоїть перший у відповідній команді.Відладка програми.
За винятком початкових простих програм практично всі програми на мові асемблера мають потребу в відладці. Для відладки можна використовувати різні відладчики, наприклад tg386-Turbo Debuger фірми Borland. Сучасні відладчики дозволяють в процесі відладки контролювати значення регістрів загального призначення, а також значення змінних і змінювати їх в процесі відладки, можна переглядати зміст різних ділянок пам’яті, можна контролювати виконання покроково, або розставляти точки зупинки.Використання інтегрованих середовищ (ІС).
Дуже зручно користуватись для підготовки тексту програми редакторами ІС, такі можливості передбачають практично всі виробники сучасних асемблерів. ІС мають суттєву перевагу, так як дають доступ до довідкової інформації. Вони дозволяють також зразу асемблювати та компонувати набрані тексти і провести його відладку. Потім знову можна повернутись до його редагування, при цьому складається ілюзія роботи з однією програмою. Слід відмітити, що відладчики вбудовані в ІС мають дещо обмежені можливості.
Основні відомості та правила для написання програм на асемблері.
Всі данні в мікропроцесорі представляються у вигляді набору бітів певної довжини, тільки окремі команди мікропроцесора розглядають вміст регістру або комірки пам’яті в певному форматі. В переважній більшості випадків сам програміст вирішує як розглядати певний набір бітів: як код клавіш, як число без знаку чи зі знаком, або як двійково-десяткове число. Всі числа які представляють певні данні розглядаються в позиційній системі числення. При представленні чисел команді мікропроцесора використовується двійкова система числення. Щоб спростити процес програмування мова асемблера дає можливість данні записувати так, як це зручно програмісту, при цьому можна записувати данні в різних системах числення. Можна навіть замість числа записувати вирази, процес перетворення цих чисел у двійковий вигляд буде виконувати програма асемблера. При записі двійкових чисел використовують суфікс В або в: 11011111В, 11010101в.
При записі чисел в 16-вій системі числення треба враховувати, що для чисел 10-15ами.
За винятком пбукви латинського алфавіту. Щоб відрізнити 16-ві числа дописується суфікс Н або h, крім того перш0пбуква в записі шістнадцяткового числа повинн0пбути арабською цифрою. Тобто для написання числа c5h не достатньо суфікса h, треба обов’язково поставити спершу 0:0C5h. За умовчанням використовується десяткове CЧ. При допомозі директиви radix можна міняти CЧ.Двійкові числа.Для великої кількості команд допускається, що інформація представлена в двійкових кодах, довжина цих двійкових чисел може бути різною. Мікропроцесори сімейства І 80х86 підтримують дані таких розмірностей:
Крім того до специфічних даних можна віднести адрес переходів. Байт – це мінімальна к-сть інформації при роботі мікропроцесора, складається із 8 біт. Вся пам’ять мікропроцесора може розглядатись як велика к-сть байтів.
210б=1Кб 220б=1Мб 230б=1Гб 240б=1Тб
Так як байт складається з 8 біт, кожен біт може перебувати в двох станах, то байт може перебувати в 256-тьох станах. Крім представлення чисел байт використовується для збереження символьних кодів, наприклад це може бути символ, що набирається з клавіатури. 256 різних значень байта дозволяють описати з допомогою ASCII не тільки десяткові числа, а й весь англійський алфавіт, а також знаки пунктуації, спеціальні знаки, управляючі символи, символи національних алфавітів. Слово може містити 216=65536 різних станів, а це є 64 Кб. Слово це найбільш зручний спосіб збереження інформації в даному сімействі мікропроцесорів, адже їх внутрішні регістри як мінімум 16-ти розрядні. У всіх мікропроцесорів фірми Intel правило запису багатобайтних чисел таке: молодший байт знаходиться за молодшою адресою в пам’яті, старший за старшою адресою. Адреса деякої ділянки пам’яті яка розглядається як слова рівна адресі молодшого байту. Наприклад, якщо за адресою N записано слово 1539H, то це означає, що за адресою N записаний байт 39H, а за адресою N+1 – 15Н. Важливим є число 65536, для процесорів 80х86 це число визначає максимальну довжину сегменту, тобто області пам’яті, яка містить код або данні програми, тому за допомогою таких чисел до 65536 можна адресувати комірки пам’яті всередині даного сегменту, така адресація, коли використовується зміщення всередині сегменту називається ближньою – Near. Подвійні слова рівні 4 байт, або 32 біт. Одне слово може мати 4294967296=4Мб. Подвійні слова зберігаються в пам’яті за цим же правилом: молодший байт за молодшою адресою, байти в пам’яті розташинятком ппослідовно один за одним 12554959Н – слово подвійне, якщо воно знаходиться за адресою N, то за адресою N знаходиться байт 59Н, N+1 – 49H, N+2 – 55H, N+3 – 12H. Подвійне слово при програмуванні для процесорів молодших 80386 має достатньо місця для збереження не тільки адреси всередині сегменту, а й адреси початку сегменту і адреси зміщення в середині сегменту називається дальньою – for adress адресою. При програмуванні , коли для завдання адреси використовується 32 біти (для мікропроцесорів 80386 і старше) в подвійному слові кожна зберігати 32-розрядне зміщення. За допомогою цього зміщення можна звертатись до будь-якої комірки пам’яті. Рядки в мікропроцесорах родини І 80х86 можна виконувати операції над рядками. Рядок – це послідовність байтів або слів, а для мікропроцесорів старших 80386 подвійних слів, які знаходяться в пам’яті комп’ткера. Мінімальна довжина рядку 1 елемент, максимальна довжина рядку може досягати 64 Кб для мікропроцесорів молодших 80386, і 4Гб для мікропроцесорів старших 80386.
Представлення чисел зі знаком.
Мікропроцесори даної родини підтримають обробку чисел зі знаком, для чисел, які мають розмірність байт, слово, подвійне слово. Для представлення знаку використовують самий старший розряд числа 0 – “+”, 1 – “-“. В зв’язку з цим діапазон представлення чисел звужується. Наприклад для байтів зі знаком мінім. число : -128, макс. число : 127. Відповідно слово зі знаком : -32768 і 32768, подвійне слово : -2147483648 і 2147483647.
Від’ємні числа зберігаються в додатковому коді. Використання двійквого коду має переваги: можна виконувати арифметичні операції не знаючи як представлені операнди: зі знаком чи без знаку. Це означає, що сам програміст вирішує як інтерпретувати результат зі знаком чи без. Двійково-десяткові числа. Мікропроцесори даної родини дозволяють працювати з так званими двійково-десятковими числами, вони представляють собою числа від 0 до 9 записані в двійковому вигляді, для їх запису використовується 4 біти. На відміну від просто двійкових чисел тут не ми.
За винятком птетради, які відповідають
числам a – f 16-вої СЧ. Мікропроцесори
цьої родини підтримують роботу з
двома форматами двійково-
Вони займають 1б – 2птетради.
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 0
отже при допомозі однобайтного двійково-десяткового числа можна записати десяткові числа 0 – 99.
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
9 9
При необхідності працювати з більшими числами необхідно використовувати кілька байт. Зауважимо, що не має стандартної форми запису для від’ємного представлення таких чисел: старший біт тут не можна використовувати як знаковий. Програміст сам повинен турбуватися про збереження інформації про знак числа і самостійно обробляти знак при виконанні арифметичних дій. МП для такої обробки не мають відповідних команд.
Неунаковані двійково-десяткові числа.
Як і унаковані вони займають 1б, але в цьому байті записується тільки одна десяткова цифра, ця цифра записується в молодшій тетраді: