Створення калькулятора на асемблері
Відмінності системного програмування від прикладного програмування. Опис асемблера, його основних властивостей та принципів програмування на ньому. Перевірка програми на дієздатність, відсутність помилок та відповідність функціональності асемблера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 03.12.2019 |
Размер файла | 160,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Черкаський державний технологічний університет
Кафедра інформаційної безпеки та комп'ютерної інженерії
КУРСОВА РОБОТА
з дисципліни «Системне програмування»
на тему „Створення калькулятора на асемблері ”
Студента (ки) 2 курсу
СКС-177 групи Білосуцев Н.Г
Керівник Зубко І.А. Ст. викладач
м. Черкаси 2019
Зміст
асемблер програмування програма системний
Вступ
1. Ассемблер
1.1 Словесний опис
1.2 Мова ассемблера
1.3 Умовні переходи
1.4 Цикли
2. Постановка та виконання завдання
2.1 Завдання на курсову роботу
2.2 Алгоритм програми
2.3 Програма
2.3 Запуск коду програми
Висновки
Список використаної літератури
Додаток до курсової роботи
Вступ
Тема: «Створення калькулятора на ассемблері». В даній курсовій роботі потрібно розробити програму.
Системмне програмувамння (або програмування систем) -- це вид програмування, який полягає у розробці програм, які взаємодіють з системним програмним забезпеченням (операційною системою), або апаратним забезпеченням комп'ютера[1]. Головною відмінністю системного програмування в порівнянні з прикладним програмуванням є те, що прикладне програмне забезпечення призначене для кінцевих користувачів (наприклад, текстові процесори, графічні редактори), тоді як результатом системного програмування є програми, які обслуговують апаратне забезпечення або операційну систему (наприклад, дефрагментація диска) що обумовлює значну залежності такого типу ПЗ від апаратної частини. Слід зазначити, що «звичайні» прикладні програми можуть використовувати у своїй роботі фрагменти коду, характерні для системних програм, і навпаки; тому чіткої межі між прикладним та системним програмуванням немає[2]. Оскільки різні операційні системи відрізняються як внутрішньою архітектурою, так і способами взаємодії з апаратним та програмним забезпеченням, то принципи системного програмування для різних ОС є відмінними. Тому розробка прикладних програм, які здійснюватимуть одні і ті ж дії на різних ОС, може суттєво відрізнятися.
В загальному для системного програмування характерні такі особливості (одна або кілька):
· програміст повинен враховувати особливості операційної системи та/або апаратного забезпечення, на яких передбачається запуск програми, та використовувати ці особливості (наприклад, застосовуючи оптимізовані алгоритми для певної архітектури)
· зазвичай використовуються низькорівневі мови програмування або діалекти які:
o можуть працювати у ресурсо-обмеженому середовищі
o максимально раціональні та мають мінімальні затримки за часом виконання
o мають малі бібліотеки бібліотеки періоду виконання (RTL), або взагалі їх не мають
o дозволяють виконувати прямий доступ до пам'яті та керуючої логіки
o дозволяють програмісту писати частини програми на асемблері
· налагодження може бути складним, якщо неможливо запустити програму у режимі налагодження через обмеження у ресурсах. Виконання програми у імітованому середовищі може зняти цю проблему.
Системне програмування суттєво відрізняється від прикладного програмування, що змушує програмістів спеціалізуватися у одній з цих галузей.
1. Ассемблер
1.1 Словесний опис
Асеммблер (англ. assembler) -- комп'ютерна програма-транслятор, що призначена для генерації машинного (двійкового) коду з символьного представлення цього коду (мови асемблера). Наприклад, текстовий рядок CLI для архітектури x86 перетворюється асемблером у двійковий код 11111010. Крім власне трансляції, багато програм-асемблерів підтримують і іншу функціональність, корисну при розробці системного і прикладного програмного забезпечення, таку як вибір формату об'єктного модуля, генерація символьної інформації (наприклад, відлагоджувальної), різноманітні директиви на зразок EXTERN чи GLOBAL, макрокоманди тощо. При трансляції з мов високого рівня асемблер нерідко використовується для виконання завершальної фази трансляції.
1.2 Мова асемблера
Мова Асемблер - це машинно-орієнтована мова, яка дозволяє використовувати усі структурні особливості мікропроцесорної системи, що пов'язані з апаратними можливостями, набором машинних команд, складом периферійного обладнання тощо. Мова Асемблер - це символічне подання машинної команди у вигляді її мнемонічного зображення. Програмування на Асемблері вимагає знання способів подання й оброблення даних на рівні машинних команд, що забезпечується знанням різних систем числення та архітектури МПС. Мова Асемблер поєднує у собі переваги машинної мови і деякі особливості мов високого рівня. Асемблер є найбільш ефективною мовою програмування при розв'язанні задач розробки системного програмного забезпечення, розробки програм для обміну даними з нестандартним периферійним обладнанням (драйвери), програмуванням систем реального часу для керування технологічними процесами й обладнанням, а також для забезпечення роботи інформаційно-обчислювальних систем та ефективного використання можливостей (робота у захищеному режимі) і ресурсів МПС.
Мова Асемблер мікропроцесорів фірми Intel є досить розвиненою і гнучкою. До складу мови Асемблер-86 входять понад 100 базових команд, відповідно до яких генерується понад 3800 машинних команд; близько 20 директив, призначених для розподілення пам'яті, ініціалізації змінних, умовного асемблювання тощо. Також у ній передбачено використання засобів структурування даних, що є характерним для мов програмування високого рівня.
Всі команди мови Асемблер можливо поділити за групами, відповідно їх функціональному призначенню: пересилання даних, арифметичні операції, логічні операції і зсуви, передачі керування, оброблення рядків даних і команди керування станом центрального процесора.
Сукупність команд і директив, що представляють текст програми, називаються початковим модулем. Початкові модулі створюються за допомогою текстового редактора і можуть зберігатися на будь-якому носії у вигляді початкового файла. Цей файл може мати будь-яку назву і розширення.asm. Асемблер перетворює початковий модуль в об'єктний модуль. Ця операція називається трансляцією, а програма, яка її виконує -транслятором. На етапі створення об'єктного модуля виконується перетворення команд Асемблера на машинні команди. У результаті роботи транслятора створюються: об'єктний модуль - файл, який має розширення.obj, файл лістинга, який має розширення.lst і файл перехресних посилань з розширенням.crf. Файл лістинга вміщує код Асемблера початкової програми, для кожної команди якої вказано машинний код і зміщення у кодовому сегменті, крім того, до цього файла входять таблиці з інформацією про мітки і сегменти, які використовуються у програмі і повідомлення про синтаксичні помилки. Імена файлів призначає програміст, вони можуть співпадати, а можуть бути різними.
Після створення об'єктного модуля він оброблюється за допомогою програми-укладача, яка генерує завантажувальний модуль. Це файл, який має розширення.exe і який може виконуватися МПС. Програма-укладач у завантажувальному модулі об'єднує об'єктні модулі, що входять до програми і підключає, за необхідності, бібліотечні модулі і замінює відносні адреси комірок пам'яті на абсолютні, з урахуванням області пам'яті, в яку модуль буде завантажено для виконання.
1.3 Умовні переходи
Описані в попередньому розділі інструкції переходів - це тільки частина того, що вам буде потрібно для написання корисних програм. Насправді необхідна можливість писати такі програми, які можуть приймати рішення. Саме це можна робити за допомогою операцій умовних переходів.
Інструкція умовного переходу може здійснювати чи ні перехід на цільову (зазначену в ній) мітку, в залежності від состояния регістра прапорів. Розглянемо наступний приклад:
mov ah, 1; функція DOS введення з клавіатури
int 21h; отримати наступну натиснуту
; клавішу
cmp al, 'A'; була натиснута буква "A"?
je AWasTyped; да, обробити її
mov [TampByte], al; немає, зберегти символ
AWasTyped:
push ax; зберегти символ в стеці
Спочатку в даній програмі за допомогою функції операційної системи DOS сприймається натиснута кнопка. Потім для порівняння введеного символу з символом A використовується інструкція CMP. Ця інструкція аналогічна інструкції SUB, тільки її виконання ні на що не впливає, оскільки призначення даної інструкції складається в тому, щоб можна було порівняти два операнда, встановивши прапори так само, як це робиться в інструкції SUB. Тому в попередньому прикладі прапор нуля встановлюється в значення 1 тільки в тому випадку, якщо регістр AL містить символ A.
Тепер ми підійшли до основного моменту. Інструкція JE представляет інструкцію умовного переходу, яка. здійснює передачу управління тільки в тому випадку, якщо прапор нуля дорівнює 1. Інакше виконується інструкція, безпосередньо следую-щая за інструкцією JE (в даному випадку - інструкція MOV). Прапор нуля в даному прикладі буде встановлений тільки в разі натискання клавіші A, і тільки в цьому випадку процесор 8086 перейде до вивиконанню інструкції з міткою AWasTyped, тобто інструкції PUSH.
Набір інструкцій процесора 8086 передбачає велику різноманітність інструкцій умовних переходів, що дозволяє вам здійснювати перехід майже з будь-якого прапора або їх комбінації. Можна здійснювати умовний перехід станом нуля, перенесення, по знаку, парності або прапору переповнення і по комбінації флагівв, що показують результати операцій чисел зі знаками.
Незважаючи на свою гнучкість, інструкції умовного переходу мають також серйозні обмеження, оскільки переходи в них завжди короткі. Іншими словами цільова мітка, зазначена в інструкції умовного переходу, повинна відстояти від інструкції перехід не більше, ніж на 128 байт.
1.4.Цикли
Одним з видів конструкцій в програмі, які можна побудувати за допомогою умовних переходів, є цикли. Цикл - це просто блок коду, що завершується умовним переходом, завдяки чому даних блок може виконуватися повторно до досягнення умови завершення. Можливо, вам вже знайомі такі конструкції циклів, як for і while в мові Сі, while і repeat в Паскалі і FOR в Бейсике.
Для чого використовуються цикли? Вони служать для роботи з масивами, перевірки стану портів введення-виведення до отримання виділенного стану, очищення блоків пам'яті, читання рядків з клавіатури і виведення їх на екран і т.д. Цикли - це основний засіб,яке використовується для виконання повторюваних дій. Поетому використовуються вони досить часто, настільки часто, що в на-борі інструкцій процесора 8086 передбачено фактично несколь-до інструкцій циклів: LOOP, LOOPNE, LOOPE і JCXZ.
Інструкція:
loop PrintStringLoop
робить те ж, що і інструкції:
dec cx
jnz PrintStringLoop
проте виконується вона швидше і займає на один байт менше. Кожний раз, коли вам потрібно організувати цикл, поки значення лічильника не стане рівним 0, запишіть початкове значення лічильникав регістр CX і використовуйте інструкцію LOOP.
Як же будуються цикли з більш складним умовою завершення, ніж зворотний відлік значення лічильника? Для таких випадків передбачені інструкції LOOPE і LOOPNE.
Інструкція LOOPE працює також, як інструкція LOOP, тільки цикл при її виконанні буде завершуватися (тобто перестануть виконуватися переходи), якщо регістр CX прийме значення 0 або прапор нуля буде встановлений в значення 1 (потрібно пам'ятати про те, що прапор нуля встановлюється в значення 1, якщо результат останньої арифметичної операції був нульовим або два операнда в останній операції порівняння не збігалися). Аналогічно, інструкція LOOPNE завершує виконання циклу, якщо регістр CX прийняв значення 0 або прапор нуля скинутий (має нульове значення).
2. Постановка та виконання завдання
2.1 Завдання на курсову роботу
Потрібно написати програму-калькулятор, використовуючи Turbo Assembler (TASM). Програма повинна вміти виконувати 4 дії - додавання, віднімання, множення, ділення. Введення чисел повинно відбуватися з клавіатури. Програма повинна вміти працювати з введеними числами аж до тризначних. Колір графічного відображення програми - зелений.
2.2 Алгоритм програми
Размещено на http://www.allbest.ru/
2.3 Програма
Код програми та пояснення до коду дивитись у Додатку А.
2.4 Запуск коду програми
- початок
- віднімання
- додавання
- множення
-
віднімання
Висновки
Згідно завданню було розроблено програму на мові асемблера, що виконує функцію калькулятора на 4 діі - додавання, віднімання, ділення, множення.
Отже в першому розділі було описано асемблер, його основні властивості та принципи програмування на ньому. Далі у другому розділі, згідно цієї інформації, я написав код програми, скомпілював його та преревірив на дієздатність, відсутність помилок та відповідність функціональності програми завданню курсової роботи.
В ході курсової роботи я одержав навички в написанні та відладки програми на мові ассемблер.
Література
1. ТУРБО АССЕМБЛЕР 2.0 - [Електронний ресурс]. Режим доступу: http://www.codenet.ru/progr/asm/tasm/39.php.
2. Системне програмування - [Електронний ресурс]. Режим доступу: http://tc.kpi.ua/content/kurs/SP/Lections_SP.pdf.
3. Мова програмування Асемблер-86 - [Електронний ресурс]. Режим доступу: https://studfiles.net/preview/5157445/page:33/.
4. MASM, TASM, FASM, NASM под Windows - [Електронний ресурс]. Режим доступу: https://habr.com/ru/post/326078/.
5. Асемблер - [Електронний ресурс]. Режим доступу: https://uk.wikipedia.org/wiki/%D0%90%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80.
Размещено на Allbest.ru
Подобные документы
Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.
контрольная работа [50,3 K], добавлен 12.08.2012Використання комп'ютерних навчальних систем. Розуміння основних принципів об’єктно-орієнтованої ідеології програмування. Закріплення теоретичних знань та практичних навичок програмування мовою С/С++. Створення файлу, поповнення його з клавіатури.
курсовая работа [229,4 K], добавлен 09.09.2015Загальні відомості середовища програмування Delphi, умови та особливості ефективного застосування його можливостей. Методологія розробки прикладного програмного забезпечення, його характеристика та структура, елементи, головні вимоги до функціональності.
курсовая работа [6,7 M], добавлен 11.09.2014Постановка задачі: створення списку співробітників інституту. Аналіз мов програмування та вибір мови PascalABC.Net - 32-розрядної програми, яка може працювати на сучасних версіях Windows. Опис функцій та процедур, реалізації інтерфейсу користувача.
курсовая работа [277,8 K], добавлен 25.06.2015Розрахунок собівартості інструментальної системи створення електронних підручників. Вибір технології та мови програмування. Загальна характеристика програми і принцип роботи. Вибір мови програмування. Опис тегів, які підтримуються HTML-редактором.
дипломная работа [112,7 K], добавлен 04.06.2010Дослідження середовища візуального програмування Delphi. Вивчення процесу створення навчальної програми "Електронний словник". Опис графічного інтерфейсу. Характеристика структури та основних процедур даної програми. Аналіз роботи з програмним кодом.
курсовая работа [831,2 K], добавлен 01.03.2014Стандартні розміри чисел при програмуванні на мові Асемблера. Робота з дробовими числами, використання математичного сопроцесора або його емулятора. Створення програми, яка б перетворювала ціле число в дробове і навпаки, а також функції [x], {x}, |X|.
курсовая работа [22,0 K], добавлен 12.08.2009Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.
курсовая работа [102,5 K], добавлен 14.03.2013Характеристика методів та етапів створення простих програм на мові програмування С++. Особливості структури та порядку запуску програми. Функції вводу і виводу та маніпулятори мови С++. Робота з одновимірними масивами. Символьна інформація та рядки.
дипломная работа [91,2 K], добавлен 19.06.2010Модель аналізу-синтезу компіляції. Формальний опис вхідної мови програмування. Вибір технології програмування, проектування таблиць транслятора та вибір структур даних. Опис програми реалізації лексичного аналізатора. Розробка дерев граматичного розбору.
курсовая работа [75,8 K], добавлен 26.12.2009