Курсова Анал
👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Курсова Анал
Курсова робота на тему: Використання Есемблера у мовах програмування
У нас на сайте представлено огромное количество информации, которая сможет помочь Вам в написании необходимой учебной работы.
Вам нужна качественная учебная работа (контрольная, реферат, курсовая, дипломная, отчет по практике, перевод, эссе, РГР, ВКР, диссертация, шпоры...) с проверкой на плагиат (с высоким % оригинальности) выполненная в самые короткие сроки, с гарантией и бесплатными доработками до самой сдачи/защиты - ОБРАЩАЙТЕСЬ!
Если вы @упомянете других пользователей, они получат уведомление по эл. почте и смогут присоединиться к обсуждению.
Указанный пользователь получит уведомление и должен будет пометить задание как выполненное.
У вас нет прав для добавления комментариев.
Все виды учебных работ на заказ © 2015-2020
Використання Есемблера у мовах програмування
Дата захисту "___" _________ 2015
р.
При виконанні курсової роботи на задану тему повинні бути
представлені
Дата видачі
"____" ___________ 20 14 р.
Строк
закінчення ____________________
Після створення процесора
8086 фірма Intel розробила більш досконалі процесори об’єднані під назвою I
80x86, така назва означає, що всі команди мікропроцесора, які виконуються на
молодших моделях обов’язково виконуються на старше, отже все ПЗ, які розроблені
для процесора 8086 успішно будуть працювати і на останніх моделях 80486 і
Pentium. Ми будемо розглядати процесори з точки зору програміста. Не дивлячись
на різноманітність моделей процесорів, найбільш важливим з точки зору біології
програмування є 8086 як базова модель і 80386 , як перший процесор фірми Intel,
який в повному об’ємі реалізував принцип багатозадачності.
Програмування на
мові асемблера вважається складною задачею, причини цього такі:
1.
Мова асемблера будь-якого процесора суттєво складніша
будь-якої мови високого рівня. Щоб скористатись всіма можливостями мови
асемблера, треба по крайній мірі знати команди мікропроцесора, а їх число з
усіма можливими варіантами переважає 100, їх кількість значно перевищує
кількість операторів і ключових слів інших мов високого рівня. Проблема
ускладнюється ще тим, що зміни в асемблері виникають набагато швидше ніж в
мовах високого рівня, це зв’язано з появою нових мікропроцесорів і відповідно
нових команд.
2.
Програміст, який використовує мови асемблера повинен сам
слідкувати за розподілом пам’яті та вмістом регістрів, щоб коректно розподіляти
і оперувати пам’яттю, в мовах високого рівня це робиться автоматично при
допомозі компілятора, але ця обставина має перевагу: можна оптимально
розташувати дані в пам’яті, забезпечити максимальну швидкість виконання та
мінімальну довжину програми.
3. Програми на мові асемблера
важче проектувати та підлагоджувати, треба весь час пам’ятати, що конкретно
знаходиться в кожному регістрів в даній комірці пам’яті. Прийнято вважати, що
розробка програми тільки на мові асемблера, деякого процесора, навіть якщо він
поширений не рекомендується. Зрозуміло, що будь-яку програму можна написати
тільки з допомогою асемблера, але для цього треба використати набагато більшу
кількість команд і час який піде на її виконання і відладку буде набагато
більший ніж для мови високого рівня. Набагато вигідніше писати програми на мові
високого рівня, а найбільш критичні частини на швидкодії писати на мові
асемблера. Наприклад на асемблері можна скласти процедури для реалізації
вводу-виводу низького рівня, процедури обробки переривань та деякі інші.
Розробка програми
на мові асемблера включає кілька етапів.
1)
Підготовка початкового тексту програми;
2)
Асемблювання програми(отримання об’єктного коду);
3)
Компоновка програми(отримання виконуваного файлу);
4)
Відладка програми(знаходження помилок).
Текст програми на
мові асемблера записується в один або кілька файлів, імена файлів і їх
розширення можуть бути будь-які, прийнято для файлів які містять програми мовою
асемблера прийнято використовувати розширення *.asm. Для файлів визначених
констант і повних типів розширення *.inc. Ці файли є текстовими їх можна
набрати в будь-якому текстовому редакторі. Можна також використати інтегровані
середовища для розробки програм, при програмуванні зручно виділяти один каталог
для збереження всіх файлів програми і звідти запускати всі необхідні програми
для підготовки, асемблювання та компонування програми. При використанні
стандартних редакторів тексту, редаговані тексти треба зберігати у вигляді
звичайних файлів у форматі ASCII, це означає, що ці файли треба зберігати без
додаткових символів, ці символи часто вставляють в текст різні спеціалізовані
редактори, наприклад WORD.
Підготовлений
текст мови асемблер є початковим для спеціальних програм, які називаються
асемблерами, далі програма асемблера .
Задача програми асемблера перетворити текст програми у форму двійкових команд,
останні можуть вже бути виконанні мікропроцесором. Після асемблювання дістають
так звані файли об’єктних модулів, які мають відповідні розширення *.obj. Для
отримання об’єктних файлів необхідного виконати відповідну програму асемблера
masm фірми Microsoft, або tasm фірми Borland. В обох випадках після команди
вказується ім’я файлу : masm prog1.asm ,
tasm prog1.asm .
Така форма
команди є мінімальною, крім цієї форми можна використовувати іншу форму задаючи
перед іменем файлу опції або ключі. Якщо програма складається з декількох
файлів, то їх асемблювання проводиться незалежно один від одного, хоча отримані
об’єктні файли представлені вже в двійковій формі запускати їх на виконання не
можливо.
Текст програми
може знаходитись в декількох файлах, змінні які описані в цих файлах можуть
використовуватися спільно, якщо такі файли асемблюються окремо, то не можливо
дістати повну інформацію, для того, щоб генерувати виконавчий код. Тому процес
підготовки програми обов’язково включає в себе етап компоновки. На цьому етапі
визначають всі невідомі, при окремому асемблювані, адреси всіх змінних або
функцій, які використовуються спільно. Процес об’єднання об’єктних модулів в
один файл виконується спец. програмою, яка називається компоновщиком. Це може
бути програма link фірми Microsoft, або tlink фірми Borland, отримуваний
виконуваний файл має розширення *.exe, або *.com. Компановщику треба передати
імена відповідних об’єктних файлів.
Після компонування
отримується виконуваний файл, він отримує ім’я файла, який стоїть перший у
відповідній команді.
За винятком
початкових простих програм практично всі програми на мові асемблера мають
потребу в відладці. Для відладки можна використовувати різні відладчики,
наприклад tg386-Turbo Debuger фірми
Borland. Сучасні відладчики дозволяють в процесі відладки контролювати значення
регістрів загального призначення, а також значення змінних і змінювати їх в
процесі відладки, можна переглядати зміст різних ділянок пам’яті, можна
контролювати виконання покроково, або розставляти точки зупинки.
Використання інтегрованих середовищ
(ІС).
Дуже зручно користуватись для
підготовки тексту програми редакторами ІС, такі можливості передбачають
практично всі виробники сучасних асемблерів. ІС мають суттєву перевагу, так як
дають доступ до довідкової інформації. Вони дозволяють також зразу асемблювати
та компонувати набрані тексти і провести його відладку. Потім знову можна
повернутись до його редагування, при цьому складається ілюзія роботи з однією
програмою. Слід відмітити, що відладчики вбудовані в ІС мають дещо обмежені
можливості.
Основні відомості та правила для
написання програм на асемблері.
Всі данні в
мікропроцесорі представляються у вигляді набору бітів певної довжини, тільки
окремі команди мікропроцесора розглядають вміст регістру або комірки пам’яті в
певному форматі. В переважній більшості випадків сам програміст вирішує як
розглядати певний набір бітів: як код клавіш, як число без знаку чи зі знаком,
або як двійково-десяткове число. Всі числа які представляють певні данні
розглядаються в позиційній системі числення. При представленні чисел команді
мікропроцесора використовується двійкова система числення. Щоб спростити процес
програмування мова асемблера дає можливість данні записувати так, як це зручно
програмісту, при цьому можна записувати данні в різних системах числення. Можна
навіть замість числа записувати вирази, процес перетворення цих чисел у
двійковий вигляд буде виконувати програма асемблера. При записі двійкових чисел
використовують суфікс В або в :
11011111В, 11010101 в.
При записі чисел
в 16-вій системі числення треба враховувати, що для чисел 10-15ами.
За винятком
пбукви латинського алфавіту. Щоб відрізнити 16-ві числа дописується суфікс Н або h, крім того перш0пбуква в записі шістнадцяткового числа
повинн0пбути арабською цифрою. Тобто для написання числа c5h не достатньо
суфікса h, треба обов’язково поставити спершу 0:0C5h. За умовчанням
використовується десяткове CЧ. При допомозі директиви radix можна міняти CЧ.
Для великої кількості команд
допускається, що інформація представлена в двійкових кодах, довжина цих
двійкових чисел може бути різною. Мікропроцесори сімейства І 80х86 підтримують
дані таких розмірностей:
Крім того до
специфічних даних можна віднести адрес переходів. Байт – це мінімальна к-сть
інформації при роботі мікропроцесора, складається із 8 біт. Вся пам’ять
мікропроцесора може розглядатись як велика к-сть байтів.
Так як байт
складається з 8 біт, кожен біт може перебувати в двох станах, то байт може
перебувати в 256-тьох станах. Крім представлення чисел байт використовується
для збереження символьних кодів, наприклад це може бути символ, що набирається
з клавіатури. 256 різних значень байта дозволяють описати з допомогою ASCII не
тільки десяткові числа, а й весь англійський алфавіт, а також знаки пунктуації,
спеціальні знаки, управляючі символи, символи національних алфавітів. Слово
може містити 2 16 =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-вої СЧ. Мікропроцесори цьої родини підтримують роботу з двома
форматами двійково-десяткових чисел: унакованими і неунакованими
двійково-десятковими числами.
0 0
отже при допомозі
однобайтного двійково-десяткового числа можна записати десяткові числа 0 – 99.
9 9
При необхідності
працювати з більшими числами необхідно використовувати кілька байт. Зауважимо,
що не має стандартної форми запису для від’ємного представлення таких чисел:
старший біт тут не можна використовувати як знаковий. Програміст сам повинен
турбуватися про збереження інформації про знак числа і самостійно обробляти
знак при виконанні арифметичних дій. МП для такої обробки не мають відповідних
команд.
Неунаковані двійково-десяткові числа.
Як і унаковані
вони займають 1б, але в цьому байті записується тільки одна десяткова цифра, ця
цифра записується в молодшій тетраді:
Отже діапазон
представлення чисел 0 – 9. Значення старшоWптетради не суттєве:
Для зручності
відладки в старшCптетраду записують 0:
0
0 0 0
Зворотне
представлення просте: молодш0птетрада, якщо вона знаходиться у межах
представлення чисел 0 – 9 визначає відповідне двійково-десяткове неунаковане
число. При необхідності працювати з великою розрядністю таких чисел необхідно
використовувати також кілька байт.
Приклад структури програми на мові
асемблера (ш0блон).
Приведемо основні директиви,
які використовуються і програмі на мові асемблера. Тепер використовуються
спрощені способи опису сегментів. Сегменти – це частини програми (сегменти
даних). Текст програми можна набирати великими або малими буквами, програма
асемблера самостійно переводить текст у верхній регістр. Обов’язково у тексті
програми писати коментарі. Текст який стоїть за символом “;” є коментарем, він
ігнорується при асемблюванні програми. Директива яка як правило йде з початку
програми dosseg описує розташування
сегментів. Директива mode small –
директива опису моделі пам’яті, наприклад в цьому випадку говорять, що модель
пам’яті типу small , тобто є один
сегмент коду і один сегмент коду і один сегмент даних. Директива .stack 100 – директива, яка задає
початок сегменту стеку. В стеці зберігаються тимчасові змінні і адреси
повернення з підпрограми або переривань. Як правило будь-яка програма має
сегмент стеку. В даному випадку такий запис директиви .stack 100 позначає, що стек має довжину 100байтів. Точну величину
стеку визначає число викликів підпрограм та системних ф-цій, стек треба
збільшувати. В кінцевому підсумку розмір стеку підбирають експериментально,
коли програма вже написана і відлагоджена. Директива .data – директива початку сегменту ініціалізованих даних, після
цього рядка поміщають змінні значення яких відоме (ініціалізовані змінні).
Директива .data ? – директива початку сегменту неініціалізованих даних. Директива .code – початок сегменту коду. Сегмент
коду – це частина коду яка містить команди МП, власне це й є сама програма. В
деяких випадках в цей сегмент можна поміщати не тільки команди, а й дані.
Наприклад у підпрограмах обробки переривань. Директива .startup – точка початку виконання програми. З наступного після
даного рядка починається виконання програми після її завантаження в пам’ять, ця
директива повинн0пбути обов’язково всередині сегмента коду, але не обов’язково
н0пйого початку. Директива .exit 0.
– це директива закінчення програми при виконанні цього рядка управління буде
передане ОС. Таких директив в програмі може бути кілька, число після директиви
може приймати кілька значень, це число після закінчення програми присвоюється
змінній ОС з назвою ERRORLEVEL , ця
змінна використовується в командних файлах. Є спеціальні команди для роботи з
цією змінною. Використовуючи різні числа можна повідомляти ОС, яка причина
закінчення програми. Директиви початку і закінчення програми є по суті
макровизначеними, вони визначають необхідний код який автоматично додається на
початок і кінець програми. Цей код можна подивитись у файлі лістингу після
асемблювання. End – директива
закінчення тексту програми на мові асемблера. Рядки які розміщені після
директиви end можна писати коментар
в довільній формі.
Мінімальна одиниця тексту
програми на мові асемблера – це рядок. Асемблер проглядає програму порядкові
зверху в низ, кожний рядок закінчується символом переведення рядка Vпйого
довжина в більшості випадків не може перевищувати 255 символів, однак зручно
обмежувати довжину рядка широкою екрану (80 символів). При необхідності вводити
в програмі довгі рядки їх можна об’єднувати, в кінець рядка при цьому потрібно
включати символ \ .
Рядок 2 Рядок 1 Рядок 2.
В текст програми можна
вставляти порожні рядки, які складаються тільки із розділювачів. В мові асемблера
розділювачами служать символи пропуску та горизонтальна табуляція. При допомозі
пустих рядків зручно розділяти логічні частини програми. Рядок може складатись
тільки із коментарів, в такому випадку перший символ рядка обов’язково ; . В кожному рядку може розміщуватись
або команда мікропроцесора, яка записана у мнемонічному (словом) вигляді, або
директива, директиви інакше називають псевдооператорами. Команда мікропроцесора
– це інструкція яку мікропроцесор буде виконувати в процесі виконання програми.
Асемблер переводить рядки з мнемоніками (буквеними записами команд) у
послідовності байт, які безпосередньо може виконувати процесор. Директиви
служать для визначення даних, які використовуються в програмі і для управління
процесом асемблювання. Рядок у програмі на мові асемблера може складатися з 4
полів:
1.
Поле мітки (поле імені);
2.
Поле оператора (або псевдооператора);
Обов’язковим є тільки поле
оператора або псевдооператора, всі решту полів можуть бути відсутні. Мітка є
спрощеною мнемонічною формою запису адреси команди в сегменті коду. Так саме
ім’я є спрощеною формою запису вмісту деякої переважно в сегменті даних. Отже
рядки в програмі записуються в такому загальному вигляді:
[< мітка >]: <
команда > < операнди >; коментарі
< ім’я > <директива
< операнди >; коментарі
Потрібно звернути увагу на
відсутність “ : ” після імені. Поля в
рядках мови асемблера розділяються між собою на крайній мірі одним пропуском.
Розглянемо поля детальніше. Поле мітки. При
визначенні в програмі мітки або імені змінної можна використовувати букви
латинського алфавіту великі або малі, а також символи :? _ @ $. Максимальна
к-сть символів з яких може складатись мітка або ім’я 255, але відрізняються
мітки та імена по перших 32символах. Доцільно в програмі використовувати
Трое Мужчин И Женщина Порно
Япониски Порно Массаж
Фото нежной девушки без одежды в японском стиле