Мови програмування низького рівня асемблер. Мова програмування асемблер

Мови програмування низького рівня асемблер. Мова програмування асемблер


Спочатку розберемося з термінологією.

Машинний код- Система команд конкретної обчислювальної машини (процесора), яка інтерпретується безпосередньо процесором. Команда, як правило, є цілим числом, яке записується в регістр процесора. Процесор читає це число та виконує операцію, яка відповідає цій команді. Популярно це описано в книзі Як стати програмістом.

Мова програмування низького рівня(низькорівнева мова програмування) – це мова програмування, максимально наближена до програмування в машинних кодах. На відміну від машинних кодів, у мові низького рівня кожній команді відповідає не число, а скорочена назва команди (мнемоніка). Наприклад, команда ADD - це скорочення від слова ADDITION (додавання). Тому використання мови низького рівня суттєво спрощує написання та читання програм (порівняно з програмуванням у машинних кодах). Мова низького рівня прив'язана до конкретного процесора. Наприклад, якщо ви написали програму мовою низького рівня для процесора PIC, то можете бути впевнені, що вона не працюватиме з процесором AVR.

Мова програмування високого рівня– це мова програмування, максимально наближена до людської мови (зазвичай до англійської, але є мови програмування національними мовами, наприклад, мова 1С заснована російською мовою). Мова високого рівня практично не прив'язана ні до конкретного процесора, ні до операційної системи (якщо не використовуються специфічні директиви).

Мова асемблера– це низькорівнева мова програмування, якою ви пишите свої програми. Для кожного процесора існує своя мова асемблера.

Асемблер– це спеціальна програма, яка перетворює (компілює) вихідні тексти вашої програми, написаної мовою асемблера, у файл, що виконується (файл з розширенням EXEабо COM). Якщо бути точним, то для створення файлу, що виконується, потрібні додаткові програми, а не тільки асемблер. Але про це пізніше…

Найчастіше говорять «асемблер», а мають на увазі «мова асемблера». Тепер ви знаєте, що це різні речі, і так говорити не зовсім правильно. Хоча всі програмісти вас зрозуміють.

ВАЖЛИВО!
На відміну від мов високого рівня, таких, як Паскаль, Бейсік і т.п., для КОЖНОГО АССЕМБЛЕРА існує своя мова асемблера. Це правило докорінно відрізняє мову асемблера від мов високого рівня. Вихідні тексти програми (або просто «вихідники»), написаної мовою високого рівня, ви здебільшого можете відкомпілювати різними компіляторами для різних процесорів та різних операційних систем. З асемблерними вихідниками це зробити буде набагато складніше. Звичайно, ця різниця майже не відчутна для різних асемблерів, призначених для однакових процесорів. Але в тому й річ, що для КОЖНОГО ПРОЦЕСОРА існує СВІЙ АСЕМБЛЕР і СВАЯ МОВА АСЕМБЛЕРА. У цьому сенсі програмувати мовами високого рівня набагато простіше. Проте за всі насолоди треба платити. У випадку з мовами високого рівня ми можемо зіткнутися з такими речами як більший розмір файлу, що виконується, гірша швидкодія і т.п.


У цій книзі ми говоритимемо лише про програмування для комп'ютерів із процесорами Intel (або сумісними). Для того, щоб на практиці перевірити наведені в книзі приклади, вам знадобляться такі програми (або хоча б деякі з них):

  1. . Хороша програма, особливо для новачків Включає редактор вихідного коду і деякі інші корисні речі. Працює у Windows, хоча програми пишуться під DOS. На жаль, програма коштує грошей (але воно того варте))). Подробиці див. на сайті http://www.emu8086.com.
  2. - Турбо Асемблер від фірми Borland. Можна створювати програми як DOS так Windows. Теж коштує грошей і в Наразівже не підтримується (та й фірми Borland не існує). А взагалі, річ хороша.
  3. - Асемблер від компанії Microsoft(розшифровується як МАКРО асемблер, а не Microsoft Assembler, як думають багато неприсвячених). Мабуть, найпопулярніший асемблер для процесорів Intel. Підтримується досі. Умовно безкоштовна програма. Тобто, якщо ви купуватимете її окремо, то вона коштуватиме грошей. Але вона доступна безкоштовно передплатникам MSDN і входить до пакету програм Visual Studioвід Microsoft.
  4. – асемблер від компанії Watcom. Як і всі інші, має переваги та недоліки.
  5. - має скромні можливості, але має великий плюс - входить у стандартний набір Windows. Пошукайте її в папці WINDOWS\COMMAND або WINDOWS\SYSTEM32. Якщо не знайдете, тоді в інших каталогах WINDOWS.
  6. Бажано також мати якийсь . Не завадить і досівський файловий менеджернаприклад, Волков Коммандер (VC) або Нортон Коммандер (NC). З їх допомогою можна також переглянути шістнадцяткові коди файлу, але редагувати не можна. Безкоштовних шістнадцяткових редакторів в Інтернеті досить багато. Ось один з них: McAfee FileInsight v2.1. Цей редактор можна використовувати для роботи з вихідними текстами програм. Однак мені більше подобається робити це за допомогою наступного редактора:
  7. Текстовий редактор. Необхідний для написання вихідних текстів програм. Можу порадити безкоштовний редактор PSPad, який підтримує безліч мов програмування, у тому числі і мову Асемблера.
Усі представлені у цій книзі програми (і приклади програм) перевірено на працездатність. І саме ці програми використовуються для реалізації прикладів програм, наведених у цій книзі.

І ще – вихідний код, написаний, наприклад для Emu8086, трохи відрізнятиметься від коду, написаного, наприклад, для TASM. Ці відмінності будуть обумовлені.

Більшість програм, наведених у книзі, написана для . По-перше, тому що цей асемблер найбільш популярний і досі підтримується. По-друге, тому що він постачається з MSDN та з пакетом програм Visual Studio від Microsoft. Ну і по-третє, тому що я є щасливим власником ліцензійної копії MASM.

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

Державна Бюджетно-Освітня Установа

Предмет: інформатика

Реферат

Тема: Історія мов програмування.

Асемблер.

Виконав: учень 8 класу,

середньої школи №1467

Сорокін Микола

Керівник: Цвєткова Оксана Михайлівна.

Вступ

Зі збільшенням обсягу обчислень виник перший лічильний переносний інструмент – “Рахунки”.

На початку 17 століття виникла потреба у складних обчисленнях. знадобилися лічильні пристрої, здатні виконувати великий обсягобчислень із високою точністю. У 1642 р. французький математик Паскаль сконструював першу механічну лічильну машину - "Паскаліну".

У 1830 р. англійський вчений Бебідж запропонував ідею першої програмованої обчислювальної машини (аналітична машина). Вона мала приводитися в дію силою пари, а програми кодувалися на перфокарти. Реалізувати цю ідею не вдалося, тому що було неможливо зробити деякі деталі машини.

Перший реалізував ідею перфокарт Холеліт. Він винайшов машину для опрацювання результатів перепису населення. У своїй машині він уперше застосував електрику для розрахунків. У 1930 р. американський вчений Буш винайшов диференціальний аналізатор – перший у світі комп'ютер.

Великий поштовх у розвитку обчислювальної техніки дала друга світова війна. Військовим знадобився комп'ютер, яким став “Марк-1” – перший у світі цифровий комп'ютер, винайдений у 1944 р. професором Айкнем. У ньому використовувалося поєднання електричних сигналів та механічних приводів. Розміри: 15 X 2,5 м., 750 000 деталей. Могла перемножити два 23-х розрядні числа за 4 с.

У 1946 р. групою інженерів на замовлення військового відомства США було створено перший електронний комп'ютер- "Еніак". Швидкодія: 5000 операцій складання та 300 операцій множення за секунду. Розміри: 30 м. завдовжки, об'єм – 85 м3., вага – 30 тонн. Використовувалося 18 000 ел. ламп.

Першу машину з хронічною програмою – ”Едсак” – було створено 1949 р., а 1951 р. створили машину “

Юнівак” – перший серійний комп'ютер із хронічною програмою. У цій машині вперше була використана магнітна стрічка для запису та зберігання інформації

Навіщо потрібна мова програмування?

Комп'ютери з'явилися дуже давно в нашому світі, але тільки в останній час їх почали так посилено використовувати в багатьох галузях людського життя. Ще десять років тому було рідкістю побачити якийсь персональний комп'ютер - вони були, але були дуже дорогі, і навіть не кожна фірма могла мати в офісі комп'ютер. А зараз? Тепер у кожному третьому будинку є комп'ютер, який вже глибоко увійшов у життя самих мешканців будинку.

Сама ідея створення штучного інтелекту з'явилася давним давно, але тільки в 20 столітті її почали виконувати. Спочатку з'явились величезні комп'ютери, які були часто розміром з величезний будинок. Використання таких махін, як ви самі розумієте, було дуже зручно. Але що вдієш? Але світ не стояв одному місці еволюційного розвитку - змінювалися люди, змінювалася їх довкілля, разом із нею змінювалися й самі технології, дедалі більше удосконалюючись. І комп'ютери ставали дедалі менше за своїми розмірами, доки досягли сьогоднішніх розмірів.

Але людині теж треба якось спілкуватися з машиною - адже кому потрібна некерована машина? Спочатку люди вели своє спілкування з комп'ютерами за допомогою перфокарт. Перфокарт - це невеликі картки, на які нанесені ряди цифр. У комп'ютера був "дисковод", в який вставлялися самі карти і він за допомогою маленьких голочок ставив дірочки на цифрах. Таке спілкування мало кому приносило задоволення - адже не дуже зручно тягати із собою купи перфокарт, які після одного використання доводилося викидати.

Але, як і інші технології, процес спілкування людини зі штучним інтелектом зазнав деяких змін. Тепер людина проводить свою розмову з комп'ютером за допомогою клавіатури та мишки. Це досить зручно і іноді навіть приносить задоволення людині.

Сучасні обчислювальні машини є одним із найбільш значних досягнень людської думки, вплив якого на розвиток науково-технічного прогресу важко переоцінити. Області застосування ЕОМ безперервно розширюються. Цьому значною мірою сприяє поширення персональних ЕОМ, і особливо мікроЕОМ.

За час, що минув з 50-х років, цифрова ЕОМ перетворилася з "чарівного", але при цьому дорогого, унікального та перегрітого нагромадження електронних ламп, проводів та магнітних сердечників у невелику за розмірами машину – персональний комп'ютер – що складається з мільйонів крихітних напівпровідникових приладів, які упаковані у невеликі пластмасові коробочки.

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

Комп'ютери починають торкатися життя кожної людини. Якщо ви занедужаєте, і якщо вас направлять до лікарні, то потрапивши туди, опинитеся у світі, де від комп'ютерів залежать життя людей (у частині сучасних лікарень ви навіть зустрінете комп'ютерів більше, ніж самих пацієнтів, і це співвідношення згодом зростатиме, переважуючи кількість хворих). Поступово вивчення комп'ютерної техніки намагаються вводити у програми шкільного навчання як обов'язковий предмет, щоб дитина змогла вже з досить раннього віку знати будову та можливості комп'ютерів. А в самих школах (в основному на заході та в Америці) вже багато років комп'ютери застосовувалися для ведення навчальної документації, а тепер вони використовуються при вивченні багатьох навчальних дисциплін, які не мають прямого відношення до обчислювальної техніки. Навіть у початковій школі комп'ютери впроваджуються вивчення курсів елементарної математики і фізики. Самі мікропроцесори набули не менш широкого поширення, ніж комп'ютери - вони вбудовуються в кухонні плити для приготування їжі, посудомийні машини і навіть у годинник.

Дуже широкого поширення набули ігри, побудовані з урахуванням мікропроцесорів. Сьогодні ігрова індустрія займає дуже більшу частину ринку, поступово витісняючи з нього інші розваги дітей. Але для дитячого організму дуже шкідливо сидіти годинами за монітором і відчайдушно натискати на клавіші, тому що у дитини може розвинутися своєрідна хвороба – коли у нього тільки одне на думці – комп'ютер, і більше нічого. Діти з такою хворобою зазвичай стають агресивними, якщо їх починають обмежувати доступом до ігор. У таких дітей відразу зникає якесь бажання робити щось, що не відноситься до комп'ютера і що їм не цікаво - так вони починають закидати своє навчання, що веде до не дуже добрих наслідків.

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

Комп'ютери здатні також сприймати усне мовлення як сигнали, проте їм доводиться виконувати велику роботупо розшифровці почутого, якщо форму спілкування жорстко встановлено. Адже одну й ту саму команду одна і та сама людина може вимовити декількома способами, і весь час ця команда звучатиме по-різному; а в цілому світі - мільярди людей, і кожен вимовляє ту саму команду кількома у різний спосіб. Тому в даний часДосить складно створити комп'ютер, який керуватиметься за допомогою голосу людини. Багато фірм намагаються вирішити ці проблеми. Деякі фірми роблять невеликі кроки на шляху до цієї мети, але все одно ці кроки поки майже непомітні.

Але проблема розпізнавання мови є частиною ширшої проблеми, яка називається розпізнаванням образів. Якщо комп'ютери зможуть добре розпізнавати образи, вони будуть спроможні аналізувати рентгенограми та відбитки пальців, а також виконувати багато інших корисні функції(Сортуванням листів вони займаються вже зараз). Слід зауважити, що людський мозок чудово справляється з розпізнаванням образів навіть за наявності різних шумів та спотворень, і дослідження в цій галузі, спрямовані на наближення відповідних можливостей комп'ютера до здібностей людини, є досить перспективними. Якщо комп'ютери зможуть досить якісно розпізнавати мовлення і відповідати на неї у словесній формі, то, мабуть, стане можливим вводити в них у цій формі програми та дані. Це дозволить у буквальному значенні слова говорити комп'ютеру, що він повинен робити, і вислуховувати його думку з цього приводу за умови, звичайно, що точні, що видаються їй вказівки, не містять протиріч і.т.д.

Усне спілкування з комп'ютерами дозволить спростити його програмування, проте залишається невирішена проблема, якою саме мовою слід з ним спілкуватися. Багато хто пропонує для цих цілей англійську мову, але вона не має точності і однозначності, необхідних з точки зору комп'ютера і програм, що виконуються в ньому. У цій галузі вже багато зроблено, але ще багато потрібно зробити.

Ми часто скаржимося, що інші люди нас не розуміють; але поки й самі персональні комп'ютерине здатні до кінця зрозуміти нас, або зрозуміти, що хочемо сказати з півслова. І протягом якогось періоду часу нам доведеться задовольнятися такими машинами, які просто дотримуються наших вказівок, виконуючи їх "з точністю до міліметра".

Для спілкування з комп'ютерами, ще за перфокарт, тодішні програмісти використовували мову програмування, дуже схожу на сучасний Асемблер. Це така мова, де всі команди, що надходять до комп'ютера, пишуться докладно за допомогою спеціальних слів і значків (?).

В наш час посилено використовуються мови програмування вищого рівня, працювати з якими набагато легше, ніж з Асемблером, тому що в них одне слово може заміняти відразу кілька команд. І до того ж більшість мов програмування високого рівня в назвах команд, що використовуються при спілкуванні з комп'ютером, використовують еквіваленти, названі на англійськоющо, природно, полегшує програмування. Але в них є один мінус у порівнянні з мовами, подібними до Асемблера - в Ассемблері всі команди, що надходять з програми чітко розподіляються в пам'яті комп'ютера, займаючи вільні місцятим самим значно виграючи у швидкості; а мови високого рівня не вміють цього відповідно втрачаючи у швидкості виконання програми. А в нашому сьогоднішньому світі всім відомо, що: "Час - гроші".

Хоча поки комп'ютер поступається людині з погляду творчої діяльності, тому що машина не наділена поки що такими якостями, які змогли б їй допомогти створити щось нове, що не введено в її пам'ять самою людиною.

Більшість людей, мабуть, вважають, що терміни "обчислювальна машина" і "обчислювальна техніка" синонімами і пов'язують їх з фізичним обладнанням, як, наприклад, мікропроцесором, дисплеєм, дисками, принтерами та іншими пристроями, які привертають увагу людей, коли людина бачить комп'ютер. Хоча ці пристрої важливі, все-таки вони становлять лише “верхівку айсберга”. На початковому етапі використання сучасного комп'ютерами маємо справу не з самим комп'ютером, а із сукупністю правил, званих мовами програмування, на яких вказуються дії, які повинен виконувати комп'ютер. Важливе значеннямови програмування підкреслюється тим фактом, що сама обчислювальна машина може розглядатися як апаратний інтерпретатор якоїсь конкретної мови, яка називається машинною мовою. Для забезпечення ефективної роботи машини розроблені машинні мови, використання яких становить відомі труднощі для людини. Більшість користувачів не відчувають цих незручностей завдяки наявності однієї чи кількох мов, створених для покращення зв'язку людини з машиною. Гнучкість обчислювальної машини виявляється в тому, що вона може виконувати програми-транслятори (загалом вінм називаються компіляторами або інтерпретаторами) для перетворення програм з мов, орієнтованих на користувачів, в програми машинною мовою. (У свою чергу навіть самі програми, ігри, системні оболонки є нічим іншим, як досить проста програма-транслятор, яка в міру роботи, або гри звертається за допомогою своїх команд до “комп'ютерних нутрощів та зовнішніх”, транслюючи свої команди в машинні мови .І все це відбувається в реальному часі.)

Машинні мови, мови асемблера та

мови високого рівня

Програмісти пишуть програми різними мовами програмування, деякі з яких безпосередньо зрозумілі комп'ютеру, інші потребують проміжної стадії трансляції. Сотні наявних мов можуть бути поділені на три загальні типи:

1. Машинні мови

2. Асемблерні мови

3. Мови високого рівня.

Кожен комп'ютер може розуміти лише свою машинну мову, яка є природною мовою конкретного комп'ютера. Він тісно пов'язаний із його апаратною частиною. Машинні мови у випадку складаються з послідовностей чисел (зазвичай нулів і одиниць), які є командами виконання одиночних елементарних операцій. Машинні мови є машинно- залежними, тобто. конкретну машинну мову можна використовувати лише з певним типом комп'ютера. Машинні мови незручні сприйняття людиною.

У міру поширення комп'ютерів ставало очевидним, що програмування машинними мовами гальмує розвиток комп'ютерної техніки, є дуже повільним і більшості програмістів непосильним заняттям. Замість послідовності чисел, безпосередньо зрозумілих комп'ютеру, програмісти для представлення елементарних операцій стали застосовувати англомовні абревіатури, які сформували основу мов асемблера. Для перетворення програм, написаних такими мовами, в машинну мову розроблено програми-транслятори, звані асемблерами. Перетворення відбувалося зі швидкістю, що дорівнює швидкодії комп'ютера. З появою мов асемблера використання комп'ютерів значно розширилося, проте все ще потрібно було написання великої кількості інструкцій навіть для вирішення найпростіших завдань. Для прискорення процесу програмування було розроблено мови високого рівня, у яких до виконання складних дій досить написати один оператор. Програми для перетворення послідовності операторів мовою високого рівня на машинну мову називаються компіляторами. У мовах високого рівня інструкції, написані програмістами, найчастіше виглядають як звичайний текст англійською із застосуванням загальноприйнятих математичних знаків.

Однією з мов високого рівня є мова програмування З.

Історія мови С

Мова бере свій початок від двох мов, BCPL і B. У 1967 році Мартін Річардс розробив BCPL як мову для написання системного програмного забезпечення та компіляторів. У 1970 році Кен Томпсон використовував В для створення ранніх версійОС UNIX на комп'ютері DEC PDP-7. як у BCPL, так і в У змінні не поділялися на типи- кожне значення даних займало одне слово в пам'яті та відповідальність на розрізнення, наприклад, цілих і дійсних чисел повністю лягала на плечі програміста.

Мова С була розроблена (на основі В) Деннісом Річі з Bell Laboratories і вперше була реалізована в 1972 році на комп'ютері DEC PDP-11. Популярність С отримав як мову ОС UNIX. Сьогодні практично всі основні операційні системи були написані на С та/або С++. Після двох десятиліть С є в наявності на більшості комп'ютерів. Він залежить від апаратної частини.

Наприкінці 70-х З перетворився на те, що ми називаємо «традиційний С». У 1983 році Американським комітетом національних стандартів у галузі комп'ютерів та обробці інформації було засновано єдиний стандартцієї мови.

Висновок

З даного реферату можна дійти невтішного висновку, що життя повністю пронизана комп'ютерними технологіями. Про що трохи пройде часу і комп'ютери стоятимуть скрізь, де потрібна присутність людини. Але без певних знань спілкування з комп'ютером буде неможливим. А для того, щоб змусити його працювати на себе, потрібно знати його мова-мовапрограмування.

Список використаної літератури

1. Том Сван "Освоєння Turbo Assembler", Діалектика, Київ, 1996 р.

2. Березін Б.І., Березін С.Б. "Початковий курс програмування", Діалог МІФІ, Москва, 1996 р.

3. Лекції Комлевої Ніни Вікторівни з предмету “Мови програмування та методи трансляції”

4.Х.М.Дейтел, Як програмувати на З, Видавництво Біном, Москва, 2000

Надіслати свою гарну роботу до бази знань просто. Використовуйте форму нижче

Студенти, аспіранти, молоді вчені, які використовують базу знань у своєму навчанні та роботі, будуть вам дуже вдячні.

мова програмування асемблер

Вступ

Мова програмування асемблер

Історія мови

Програмування мовою асемблер

Переваги та недоліки мови

Turbo Assembler (TASM)

Система переривання програм

Механізм переривання

Робота механізму переривання

Висновок

Список літератури

додаток

Вступ

Прогрес комп'ютерних технологій визначив процес появи нових різноманітних знакових систем запису алгоритмів - мов програмування. Існує безліч мов програмування, але ми зупинимося на Ассемблері.

Незважаючи на те, що в даний час програміст може використовувати велику кількість мов програмування, які набагато простіше Асемблера, знання Асемблера та вміння програмувати на ньому ніколи не будуть зайвими. Цей факт підтверджується такими аргументами:

1. Іншими мовами програмування не завжди можливо написати програму, яка б повно задовольняла вимогам. А в деяких випадках цілком неможливо. На мові програмування Асемблер можна написати будь-яку програму.

2. Іноді мови програмування високого рівня не можуть забезпечити необхідну швидкодію. А додаток створений на Ассемблері завжди швидкодіючий.

3. Розмір додатків, створених на мовах високого рівня, маю набагато більший розмір, ніж додатки, створені на Асемблері.

4. Мова Асемблер дозволяє працювати безпосередньо з апаратними засобами, що в деяких випадках дає програмісту перевагу та необхідний результат. Додаток на мові високого рівня працює з апаратними пристроями через написані модулі, тобто не дозволить програмісту щось змінити, а отже, отримати необхідний результат.

5. Знання мови Асемблер дає більшу перевагу перед тими, хто програмує лише мовами високого рівня. Знаючий асемблер знає і структуру комп'ютера, і структуру апаратних пристроїв.

Мета роботи:

описати мову програмування Асемблер;

виявити переваги та недоліки мови;

описати Turbo Assembler;

ознайомитись із механізмом переривання.

Мова програмування асемблер

Історія асемблера

Програмісти вже були знайомі з поняттям підпрограми: Грейс Хоппер та її колеги застосовували підпрограми на гарвардському "Марку-1" під час Другої світової війни, проте кожна підпрограма вирішувала своє специфічне завдання.

Підпрограмами називаються незалежні фрагменти комп'ютерної програми, що використовуються багаторазово і викликаються з головної програмиу випадку необхідності. Наприклад, одна підпрограма може обчислювати квадратний корінь, а інша змусить комп'ютер вивести літеру на дисплей.

Перші програмісти майже завжди мали блокноти із записом найбільш уживаних підпрограм, щоб у разі потреби не складати їх заново. Проблема полягала в тому, що адреси розташування команд та змінних підпрограм у пам'яті змінювалися залежно від її розміщення в останній. Налаштування підпрограм на певне місце пам'яті, очевидно, потребувало автоматизації, і вперше це було зроблено на «Едсаку». Програмісти Кембриджу розпочали з написання набору уніфікованих підпрограм, які й утворили бібліотеку. Після цього достатньо було ввести лише коротку команду - і комп'ютер проробляв всю роботу з налаштування та розміщення підпрограми всередині програми.

Моріс Вілкс назвав мнемонічну схему для «Едсака» та бібліотеку підпрограм збиральною системою (англійською assembly system - звідси слово «асемблер»), оскільки вона збирала послідовності підпрограм.

Асеммблер (від англ. assembler - збирач) - комп'ютерна програма, компілятор вихідного тексту програми, написаної мовою асемблера, програмою машинною мовою.

Мова асемблера російською часто називають просто асемблером. Транслятор із цієї мови теж зазвичай називають просто асемблером, що в ряді випадків може створити плутанину. Процес трансляції з мови асемблера в машинний код часто називають асемблюванням.

Використання терміна «мова асемблера» може викликати хибну думку про існування єдиної мови низького рівня або хоча б стандарту на такі мови, що абсолютно не відповідає істині. Тому при іменуванні мови, якою написана конкретна програма, бажано уточнювати, для якої архітектури вона призначена і яким діалектом мови написана.

Програмування мовою асемблер

Асемблер - мова програмування низького рівня, що являє собою формат запису машинних команд, зручний для сприйняття людиною.

Команди мови асемблера один на один відповідають командам процесора і, фактично, є зручною символьною формою запису команд та їх аргументів. Також мова асемблера забезпечує базові програмні абстракції: зв'язування частин програми та даних через мітки із символьними іменами та директиви.

Директиви асемблера дозволяють включати в програму блоки даних (описані явно або лічені з файлу); повторити певний фрагмент вказану кількість разів; компілювати фрагмент за умовою; задавати адресу виконання фрагмента, змінювати значення міток у процесі компіляції; використовувати макровизначення з параметрами та ін.

Кожна модель процесора, в принципі, має свій набір команд та відповідну йому мову (або діалект) асемблера.

Асемблерні програми можуть бути дуже ефективними. З програмістів, з рівними навичками та здібностями, що працюють на мові Асемблера створити програму більш компактну та швидкодіючу, ніж таку ж програму, написану мовою високого рівня. Це практично для всіх невеликих або середніх програм. На жаль, у міру зростання розмірів, програми мовою Асемблера втрачають частину своїх переваг. Це відбувається через необхідну в асемблерній програмі увагу до деталей. Як ви бачите, мова Асемблера вимагає від вас планування кожної дії комп'ютера. У невеликих програмах це дає змогу оптимізувати роботу програми з апаратними засобами. У великих же програмах безліч деталей може завадити вам ефективно працювати над самою програмою, навіть якщо окремі компоненти програми виявляться дуже непоганими. Безумовно, програмування мовою Асемблера відповідає потребам кожної програми.

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

Зрозуміло, ефективність і точність мови Асемблера дають певні переваги. Але його деталізованість створює деякі проблеми. Коли ж варто вибирати для програмування мову Асемблера?

Звичайно, ви повинні користуватися програмами на мові асемблера, коли немає іншого способу написати програму. Наприклад, програмісти фірми IBM писали з використанням процедур Асемблера всі програми управління пристроями вводу-виводу IBM PC. Для управління пристроями вводу-виводу та системою переривань, була потрібна та точність мови Асемблера, яку не може забезпечити жодна інша мова програмування. Аналогічно, мовою Асемблера у фірмі IBM писалися процедури діагностики, які мають перевіряти кожну деталь апаратури.

Мова асемблера необхідний також і в тих випадках, коли головними є робочі характеристики програми. Це може бути час виконання або кінцевий розмір програми. Бібліотека математичних процедур Фортрана – приклад програми, що вимагає хороших характеристик, як щодо часу, і розміру. Математичні процедури є частиною будь-якої програми на Фортрані, тому вони мають займати якнайменше місця. Крім того, ці процедури керують усіма математичними функціями в програмі фортранівської і часто використовуються. Отже, вони мають виконуватися швидко.

Яка програма не підходить для мови Асемблера? Звичайно, ви можете написати на ньому будь-яку програму, проте з великою програмоюкраще працювати у мові високого рівня, такому як C чи C#. Ці мови дозволяють вам зосередитись на своїй проблемі. Вам не доводиться безпосередньо мати справу з тонкощами апаратного обладнання та процесора. Мови високого рівня дозволяють відступити назад і за деревами побачити ліс.

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

Найбільш популярними на сьогоднішній день є пакети Turbo Assembler (TASM) фірми Borland, Macro Assembler for Windows32 (MASM32), створений Hutch (на основі старої MASM фірми Microsoft), а також Flat Assembler (FASM), та Netwide Assembler (NASM), що розвивається командою NASM Development Team. Всі ці асемблери надають широкі можливості для програміста. Там можна писати програми як під DOS, і під Windows.

Існує також безліч інших видів асемблера, кількість яких зростає. Наприклад: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic ++ Assembler (NBASM), TMA Macro Assembler та ін.

Переваги та недоліки мови

Переваги

Майстерний програміст, як правило, здатний написати більш ефективну програму на асемблері, ніж ті, що генеруються трансляторами з мов програмування високого рівня, тобто для програм на асемблері характерне використання меншої кількості команд і звернень на згадку, що дозволяє збільшити швидкість і зменшити розмір програми .

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

При програмуванні на асемблері можливий безпосередній доступ до апаратури, у тому числі портів вводу-виводу, регістрів процесора та ін.

Мова асемблера застосовується для створення драйверів обладнання та ядра операційної системи

Мова асемблера використовується для створення "прошивок" BIOS.

За допомогою мови асемблера створюються компілятори та інтерпретатори мов високого рівня, а також реалізується сумісність платформ.

Існує можливість дослідження інших програм з відсутнім вихідним кодом за допомогою дизассемблера.

Недоліки

Головна перевага асемблера практично повністю нівелюється гарною оптимізацією у сучасних компіляторах мов високого рівня.

В силу своєї машинної орієнтації («низького» рівня) людині в порівнянні з мовами програмування високого рівня складніше читати і розуміти програму, вона складається із занадто «дрібних» елементів - машинних команд, відповідно ускладнюються програмування та налагодження, зростає трудомісткість, велика ймовірність внесення помилок . Значною мірою зростає складність спільної розробки.

Як правило, менша кількість доступних бібліотек порівняно із сучасними індустріальними мовами програмування.

Відсутня переносимість програм на комп'ютери з іншою архітектурою та системою команд (крім двійково-сумісних).

Turbo Assembler (TASM)

Турбо Асемблер фірми Borland є багатопрохідним асемблером з дозволом випереджальних посилань, швидкістю асемблювання до 48000 рядків на хвилину (на комп'ютері IBM PS/2, модель 60), сумісний з макроассемблером фірми Microsoft MASM і додатковою можливістю використання режиму розширеного синтаксису. Незалежно від вашого досвіду в програмуванні ви, безперечно, оціните ці особливості, а також низку інших засобів, які значно полегшують програмування на асемблері.

Серед таких засобів можна коротко згадати такі:

повна підтримка процесора 80386;

покращена синтаксична перевірка типів;

спрощені директиви визначення сегментів;

покращене управління лістингом;

розширення інструкцій POP та PUSH;

розширений оператор CALL з аргументами та необов'язковим параметром мови;

локальні мітки;

локальні ідентифікатори у стеку та аргументи виклику у процедурах;

структури та об'єднання;

вкладені директиви;

режим QUIRK, що емулює MASM;

повне налагодження лише на рівні вихідного тексту з допомогою Турбо відладчика;

вбудована утиліта генерації перехресних посилань (TCREF);

файли конфігурації та командні файли.

Турбо Асемблер є потужним асемблером, що працює з командним рядком, який сприймає ваші вихідні файли (файли з розширенням *. asm *) і створює з них об'єктні модулі (файли з розширенням *. obj *). Після цього ви можете використовувати програму-компонувальник фірми Borland TLINK. EXE, що відрізняється високою швидкістю компонування, для компонування отриманих об'єктних модулів та створення файлів, що виконуються (файлів з розширенням *. exe*).

Турбо Ассемблер створений для роботи з процесорами серії 80х86 і 80х87 (докладніше набір інструкцій процесорів серії 80х86/80х87 описаний у відповідних посібниках фірми Intel).

Turbo Assembler, окрім повної підтримки транслятора фірми Microsoft, має додаткові можливості, об'єднані в режимі, названому розробниками Ideal. Використання цього режиму дає можливість програмісту-початківцю застосовувати більш наочний і простий стиль розробки програм. Більш досвідчені програмісти, які пишуть на асемблері, можуть використовувати такі можливості режиму Ideal, як вкладені структури, об'єднання.

Важливою особливістю режиму Ideal є застосування перевірки типів даних, подібно до мов високого рівня, що дозволяє виявити багато помилок ще на етапі трансляції. Серед багатьох інших важливих переваг режиму Ideal можна виділити:

Можливість використання однакових імен для позначення членів різних структур;

Застосування операторів HIGH та LOW;

Попереднє обчислення виразів EQU;

Коректне управління сегментами даних, об'єднаних у групи;

Удосконалене використання директив;

Розумне використання дужок у виразах.

Turbo Assembler передає аргументи в процедури мовами високого рівня кадру стека, поміщаючи аргументи перед викликом процедури в стек. Процедури, написані мовами високого рівня, зчитують аргументи зі стека за необхідності. При виході процедура може видаляти аргументи зі стека або залишати цю операцію для процедури, що викликає.

Традиційним способом, за допомогою якого об'єднуються програми, написані на С++ і асемблері, є розділова компіляція з наступним компонуванням в один файл, що виконується. При цьому можна використовувати компілятор Borland C + +, який викликає Turbo Assembler для трансляції асемблерної програми.

Розробка програми мовою Turbo Assembler включає чотири етапи:

1-й етап. Підготовка вихідного тексту програми та оформлення його у вигляді текстового файлу (одного або кількох) за допомогою якогось редактора у форматі DOS з розширенням *. Asm*.

2-й етап. Ассемблювання програми із застосуванням транслятора Tasm, результатом якого є об'єктний файл із розширенням *. obj*. Коли програма складається з кількох файлів (модулів), їх асемблювання проводиться незалежно друг від друга. Якщо в процесі трансляції будуть виявлені помилки, об'єктний файл не створюється, а формується повідомлення про помилки. Помилки усуваються, після чого трансляція повторюється. Об'єктний файл (двійково-кодоване представлення програми) не може бути запущений на виконання, тому що в ньому не міститься інформація про завантаження сегментів програми в пам'яті комп'ютера.

3-й етап. Компонування програми проводиться компонувальником (редактором зв'язків) Turbo Linker і полягає в об'єднанні об'єктних модулів в один файл, що виконується з призначенням стартової адреси програми. Виконуваний файл має розширення *. exe*. 2-й та 3-й етапи визначають процес підготовки виконавчого файлу програми, званого трансляцією.

4-й етап полягає у налагодженні програми з використанням відладчика Turbo Debugger, який буде основним інструментом щодо форматів команд, їх кодування, а також представлення змінних програми в пам'яті.

Система переривання програм

Однією з важливих відмінностей комп'ютера від будь-якої іншої машини є те, що ПК здатний реагувати на непередбачувані події в процесі роботи. Ця здатність забезпечується за допомогою особливої ​​якості комп'ютера - апарату переривань. Переривання дозволяє комп'ютеру призупинити будь-яку свою дію і перейти на іншу залежно від того, що викликає це переривання. Наприклад, натискання відповідної кнопки на клавіатурі.

Здатність до переривання дозволяє, начебто, найскладнішу проблему ефективності роботи нашого комп'ютера. З одного боку, ми хочемо, щоб комп'ютер займався роботою, яку ми йому дали. З іншого боку, нам потрібно, щоб він реагував на будь-яку нашу команду, яку подають, наприклад, за допомогою клавіатури. Якби комп'ютер був здатний тільки на те, щоб не відволікаючись виконувати те, що йому заздалегідь було задано, він не зміг би відповісти на наші запити вчасно, не стежачи постійно за діяльністю клавіатури. Реагувати на сигнали, що надсилаються клавіатурою, так само як і на інші сигнали, що потребують уваги в той час, коли комп'ютер зайнятий іншою роботою, дозволяє йому система переривань.

Мікропроцесор нашого ПК має “вроджену” здатність переривати виконання операцій, причому у нього існує надійний засіб відкладати на зберігання роботу, виконання якої було перервано. Для цього використовується стек мікропроцесора. Коли відбувається переривання, запис того, що робив комп'ютер у цей момент, зберігається в стеку, так що після завершення переривання ми можемо повернутися до того місця, від якого нам довелося відволіктися. Це один із кількох способів застосування стека, але він є найважливішим. Без стека, куди ми можемо покласти на зберігання інформацію про роботу, не могла б реалізуватися сама ідея переривання.

Механізм переривання

Переривання (англ. interrupt) - сигнал, що повідомляє процесору про настання будь-якої події. При цьому виконання поточної послідовності команд припиняється, і керування передається обробнику переривання, який реагує на подію та обслуговує її, після чого повертає керування перерваний код.

Програмне переривання – синхронне переривання, яке може здійснити програма за допомогою спеціальної інструкції.

Для обробки подій, що відбуваються асинхронно по відношенню до виконання програми, найкраще підходить механізм переривань. Переривання можна як деяку особливу подію у системі, потребує моментальної реакції. Наприклад, добре спроектовані системи підвищеної надійності використовують переривання по аварії в мережі живлення для виконання процедур запису вмісту регістрів і оперативної пам'яті на магнітний носій з тим, щоб після відновлення живлення можна було продовжити роботу з того ж місця.

Здається очевидним, що можливі найрізноманітніші переривання з різних причин. Тому переривання розглядається не просто як таке: з ним пов'язують число, яке називається номером типу переривання або просто номером переривання. З кожним номером переривання пов'язують ту чи іншу подію. Система вміє розпізнавати, яке переривання, з яким номером воно відбулося, і запускає відповідну номеру процедуру.

Програми можуть самі викликати переривання із заданим номером. Для цього використовують команду INT. Це так звані програмні переривання. Програмні переривання є асинхронними, оскільки викликаються з програми.

У процесорах архітектури x86 для явного виклику синхронного переривання є інструкція Int, аргументом якої номер переривання (від 0 до 255). В IBM PC-сумісних комп'ютерах обробку деяких переривань здійснюють підпрограми BIOS, що зберігаються в ПЗУ, і це служить інтерфейсом для доступу до сервісу, що надається BIOS. Також обслуговування переривань можуть взяти на себе BIOS карт розширень (наприклад, мережевих або відеокарт), операційна система і навіть звичайні (прикладні) програми, які постійно знаходяться в пам'яті під час роботи інших програм (т. зв. резидентні програми). На відміну від реального режиму, у захищеному режимі x86-процесорів звичайні програми не можуть обслуговувати переривання, ця функція доступна лише системному коду (операційній системі).

MS-DOS використовує для взаємодії зі своїми модулями та прикладними програмами переривання з номерами від 20h до 3Fh (числа дані у шістнадцятковій системі числення, як це прийнято при програмуванні мовою асемблера x86). Наприклад, доступ до основної множини функцій MS-DOS здійснюється виконанням інструкції Int 21h (при цьому номер функції та її аргументи передаються в регістрах). Цей розподіл номерів переривань не закріплений апаратно і інші програми можуть встановлювати свої обробники переривань замість або поверх вже наявних обробників, встановлених MS-DOS або іншими програмами, що зазвичай використовується для зміни функціональності або розширення списку системних функцій. Також цією можливістю користуються віруси.

Робота механізму переривання

Кожне певне переривання ідентифікується своїм номером. Наприклад, таймер і клавіатура та принтер мають кожен власний номер переривання. Що ж до базової системи вводу/вывода, її сервісні програми поділяються на групи, причому за всіма програмами групи закріплюється один номер переривання.

Коли відбувається переривання, його номер таблиці використовується для включення відповідної програми обробки переривань. Перед тим, як така програма почне свою роботу, механізм мікропроцесора, який відповідає за обробку переривань, залишає запис у стеку про те, яка робота проводилася до переривання. Після цього виконується програма обробки переривання.

Програма обробки переривань починає роботу, вживши запобіжні заходи проти подальших можливих переривань у разі, якщо повинні виконуватися дуже важливі чи складні операції, які не можна переривати. Зазвичай такі програми включають зміну сегментного регістру, керуючого доступом пам'ять, а також запис у стек подальшої інформації про стан, яку необхідно зберегти на додаток до тієї, яка була автоматично записана на початку переривання.

Після завершення операцій програма обробки переривань може знову привести в дію інші типи переривань і виконувати необхідну роботу. Коли операції переривання закінчуються, програма обробки переривань відновлює вихідний станмашини, в якому вона перебувала до переривання, і комп'ютер продовжує перервану роботу.

Наприклад розглянемо програму, яка є виконуваний *. exe файл після запуску якого на екрані періодично з'являється державний прапор Росії. Період появи приблизно 1 раз на 2 секунди (див. Додаток). Ця програма має наступний алгоритм роботи (рис. 1):

Розміщено на http://www.allbest.ru/

Мал. 1. Алгоритм роботи програми.

Програмне звернення до відеодрайвера BIOS реалізується за допомогою переривання INT 10h. При роботі в текстовому режимі зазвичай використовуються такі функції драйвера:

02h – встановити позицію курсора;

03h – отримати позицію курсору;

05h – встановити відеосторінку;

06h - ініціалізувати або прокрутити вгору вікно;

07h - ініціалізувати чи прокрутити вниз вікно;

09h - вивести символ та атрибут у позицію курсора;

0Ah – вивести символ у позицію курсора;

0Eh – вивести символ у режимі телетайпу;

10h, підфункція 3h - переключити біт мерехтіння/яскравість;

13h – вивести рядок у режимі телетайпу.

За допомогою функцій 06h та 07h у заданому місці екрана дисплея створюються кольорові прямокутні вікна заданого розміру. Якщо в ці вікна виведено якийсь текст, то за допомогою цих функцій можна прокручувати вгору і вниз.

Функції 09h, 0Ah, 0Eh і 13h служать виведення на екран окремих символів і символьних рядків (у циклі). Передбачено виведення одного і того ж символу задану кількість разів, що можна використовувати при створенні рамок та інших орнаментів.

Функція 0Eh реагує на коди, що управляють, виконуючи відповідні дії. Курсор рухається після виведення кожного символу.

Функція 13h призначена для виведення рядків із зазначенням атрибутів як кожного символу окремо, так і всього рядка. Функція може виконуватися у чотирьох варіантах залежно від коду режиму, що вказується в регістрі AL.

Під час виведення на екран засобами драйвера BIOS необхідно мати на увазі, що введення з клавіатури Ctrl/C не призводить до завершення програми. Слід побоюватися нескінченних циклів виведення на екран - вихід із них можливий лише шляхом перезавантаження комп'ютера.

Сигнали зовнішніх апаратних переривань (від таймера, клавіатури, дисків та ін.) надходять у процесор не безпосередньо, а через контролер переривань, як використовується мікросхема Intel 8259A. Обробка апаратного переривання обов'язково включає процедури управління контролером переривань. Організація системи апаратних переривань у тому, що до восьми вхідним висновків контролера підключаються висновки пристроїв, у яких виникають сигнали переривань. Вихід INT контролера підключається до однойменного входу мікропроцесора. При цьому, крім сигналу INT, що ініціює процедуру переривання в мікропроцесорі, контролер передає в мікропроцесор лініями даних номер вектора, через який повинна бути викликана програма обробки переривання. Номер вектора, що передається, утворюється в контролері шляхом складання базового номера, записаного в одному з його регістрів, з номером вхідної лінії, по якій надійшов запит. Номер базового вектора заноситься в контролер автоматично у процесі початкового завантаженнякомп'ютера. Контролер програмується через порти 20h та 21h. Оскільки базовий вектор завжди дорівнює 8, номери векторів, закріплених за апаратними перериваннями, лежать в діапазоні 8h,..., Fh.

У нашому випадку також необхідно розглянути переривання, викликані сигналами системного таймера.

Переривання – це готові процедури, які комп'ютер викликає для виконання певного завдання. Існують апаратні та програмні переривання. Апаратні переривання ініціюються апаратурою, або з системної плати, або з картки розширення. Вони можуть бути викликані сигналом мікросхеми таймера, сигналом від принтера, натисканням клавіші на клавіатурі та безліччю інших причин. Апаратні переривання не координуються із роботою програмного забезпечення. Коли викликається переривання, процесор залишає свою роботу, виконує переривання, а потім повертається на колишнє місце. Для того щоб мати можливість повернутися точно в потрібне місце програми, адреса цього місця (CS: IP) запам'ятовується на стеку, разом з регістром прапорів. Потім CS: IP завантажується адресу програми обробки переривання і їй передається управління. Програми обробки переривань іноді називають драйверами переривань. Вони завжди завершуються інструкцією IRET (повернення з переривання), яка завершує процес, розпочатий перериванням, повертаючи старі значення CS: IP та регістру прапорів, тим самим даючи програмі можливість продовжити виконання з того ж стану. Всі IBM PC використовують мікросхему таймера 8253 (або 8254) для узгодження імпульсів від мікросхеми системного годинника. Число циклів системного годинника перетворюється в один імпульс, а послідовність цих імпульсів підраховується для визначення часу, або вони можуть бути надіслані на гучномовець комп'ютера для генерації звуку певної частоти. Мікросхема 8253 має три ідентичні незалежні канали, кожен з яких може програмуватися. Мікросхема 8253 працює незалежно від процесора. Процесор програмує мікросхему і потім звертається до інших справ. Таким чином, 8253 діє як годинник реального часу - вона вважає свої імпульси незалежно від того, що відбувається в комп'ютері. Однак, максимальний програмований інтервал становить приблизно 1/12 секунд. Для підрахунку інтервалів часу у години та хвилини потрібні якісь інші засоби. Саме з цієї причини імпульси від нульового каналу мікросхеми таймера накопичуються в змінній, що знаходиться в області даних BIOS. Це накопичення зазвичай називається підрахунком доби. 18. 2 рази на секунду вихід каналу 0 обробляється апаратним перериванням (перериванням таймера), яке ненадовго зупиняє процесор та збільшує лічильник часу доби.

Число 0 відповідає півночі 12: 00; коли лічильник досягає значення еквівалентного 24 годин, він скидається на нуль. Інший час протягом доби легко визначається розподілом показника лічильника на 18.2 кожної секунди. Лічильник часу доби використовується у більшості операцій, пов'язаних з часом.

Висновок

Асемблер є символічним аналогом машинної мови. Тому програма, написана на асемблері, повинна відображати всі особливості архітектури мікропроцесора: організацію пам'яті, способи адресації операндів, правила використання регістрів і т. д. Через необхідність урахування подібних особливостей асемблер унікальний для кожного типу мікропроцесорів.

У цій курсової роботививчено теоретичний матеріал про мову низького рівня - асемблер, його переваги та недоліки, основні етапи програмування на асемблері. Були розглянуті принципи обробки переривань, виведення та введення інформації в графічному та текстовому режимах, обробка повідомлень системного таймера, реалізовано алгоритм виконання поставленого завдання, а також виконано трансляцію коду у виконуваний файл.

Список літератури

Касвандс Е. Г. Введення в програмування мовою Асемблер. ч. 1 - М.: ЮНІТІ - ДАНА, 2006.

Юров В. Assembler. Спеціальний довідник. - СПб. : Пітер, 2007.

Що таке асемблер. [Електронний ресурс]. - Режим доступу: http://www.assembler.webservis.ru

Ваулін А. С. Мови програмування. кн. 5 - М.: Школа-Прес, 2008.

Малютін Е. А. Мови програмування. - М.: Просвітництво, 2008.

Абель П. Мова асемблера для IBM PC та програмування /Пер. з англ. Ю. В. Сальникова - М.; Вища школа 2007 – 447 с. : іл.

Програмуємо на асемблері. [Електронний ресурс]. - Режим доступу: http://www.kalashnikoff.ru

Зубков С. В. Assembler для DOS, Windows та Unix. - М.: ІНФРА-М, 2009.

Богумирський Б. Ефективна роботана IBM PC серед Windows 95 СПб, «Пітер», 2007.

Юров В., Хорошенко В. Assembler - Навчальний курс. - СПб. : Пітер, 2007.

додаток

Код програми

; mov AX, data; ініціалізація

mov DS, AX; сегментного регістру DS

; Прочитаємо та збережемо вихідний вміст вектора 8

mov word ptr old_08h, BX

mov word ptr old_08h+2, ES

; Встановимо наш обробник переривань new_08h

mov DX, offset new_08h

push DS; Збережемо на час DS

push CS; Відправимо вміст CS

int 21h; Виклик DOS (функції 25h)

pop DS; Відновимо DS

; Зімітуємо дії, що виконуються протягом 3 с, просто зацикливши програму

; Друга гілка програми, що активізується після закінчення 3 с

; Біла смуга

; синя смуга

; червона смуга

mov CS: time, 20

; Прикладний обробник переривань від таймера,

; активується 18, 2 рази на секунду

push AX; Збережемо два використовувані

push BP; в обробнику регістру

CS: time; Декремент інтервалу часу

jnz outint; Поки не 0, вийти з переривання

; Вміст комірки time зменшився до 0, виконати перемикання програми

mov BP, SP; ВР = поточна вершина стека

mov AX, offset fin; Зміщення точки переходу

mov, AX; /Надправимо його в стек на місце IP

mov AX, seg fin; /Сегмент точки переходу

mov, AX; /Надправимо його в стек на місце CS

outint: mov AL, 20h; /Команда EOI в контролер

out 20h, AL; /переривань

MOV AX, 0600h; AH=06 (прокручування), AL=00 (весь екран)

MOV BH, 07; нормальний атрибут

MOV CX, 0000; верхня ліва позиція

MOV DX, 184Fh; нижня права позиція

INT 10h; передача управління в BIOS

MOV AH, 02; номер функції

MOV BH, 00; номер сторінки

MOV DH, 00; номер рядка

MOV DL, 00; номер стовпця

INT 10h; встановлюємо курсор

pop BP; /Відновимо обидва

pop AX; /збережених регістру

iret; /Вихід із переривання

time dw 20; /Комірка для відліку часу

; /Поля даних

old_08h dd 0; /Комірка для зберігання вихідного вектора

Розміщено на Allbest.ru

...

Подібні документи

    Еволюція мов програмування від найнижчого рівня до сучасності. Мови програмування другого покоління – асемблер. Імперативні, функціональні, логічні та об'єктно-орієнтовані мови. Автомобільна незалежність. Парадигми програмування.

    презентація , додано 14.10.2013

    Вивчення деяких аспектів мови Асемблера та ЕОМ загалом. Побудова алгоритмів вирішення поставленої задачі мовами програмування Сі, Асемблер РОЗУМ та IBM PC. Складання блок-схем рішень та написання програм кожною з перелічених мов.

    курсова робота , доданий 20.10.2014

    Вивчення мови низького рівня асемблер для написання прикладу програми для 16 бітного додатка. Розробка та реалізація алгоритму піднесення чисел до ступеня чисел над полем за основою 2 (mod 2). Ілюстрація техніки створення DOS програми.

    курсова робота , доданий 08.11.2011

    Машинні коди та асемблер. Перші мови програмування найвищого рівня. Мова програмування FORTRAN. Переваги та недоліки ALGOL. Наукові та бухгалтерські програми. Основні принципи, які дотримувалися під час створення мови програмування Basic.

    курсова робота , доданий 21.06.2014

    Мова програмування як формальна знакова система, що призначена для запису програм. Рефал як алгоритмічний мову рекурсивних функций. Лисп як асемблер, орієнтований працювати зі списковими структурами. Пролог: поняття, основні засоби.

    презентація , доданий 22.02.2014

    Особливості асемблера – машинно-орієнтованої мови низького рівня, що використовується для створення простих додатків. Зв'язування програм різними мовами. Типовий формат запису команд, інструкції та директиви мови асемблера. Розробка гри "Змійка".

    курсова робота , доданий 20.07.2014

    Характеристика мов програмування: коротка історія, хронологія. Основні види мов програмування: асемблер; бейсік. Створення та використання формул в Excel. Застосування операторів у формулах. Використання функцій у Excel. Сайт будинку відпочинку.

    звіт з практики, доданий 03.06.2011

    Введення та виведення чисел за допомогою модуля IO, що підключається. Особливості роботи з одновимірними та двовимірними масивами. Тестування стану прапорів. Рринципи та навички роботи з компілятором та відладчиком. Розробка схеми алгоритму програми мовою асемблер.

    курсова робота , доданий 02.12.2009

    Вивчення особливостей операційної системи, набору програм, що контролюють роботу прикладних програм та системних додатків. Опис архітектури та програмного забезпечення сучасних операційних систем. Переваги мови програмування Асемблер.

    презентація , доданий 22.04.2014

    Асемблер як символічний аналог машинної мови. Архітектура мікропроцесора: організація пам'яті, методи адресації операндів, правила використання регістрів. Текст програми. Етапи програмування на асемблері, алгоритми виконання завдань.

Асемблер

Асемблер― мова програмування низького рівня. Мова отримала свою назву від слова assembler - збирач. Виникло ще в 50-х роках. як символічний аналог машинної мови
Команди Асемблера один на один відповідають командам процесора і фактично є зручною символьною формою запису команд і аргументів. Також, Асемблер забезпечує зв'язування частин програми і даних через мітки, що виконується при асемблюванні (для кожної мітки вираховується адреса, після чого кожне входження мітки замінюється на цю адресу).
Оскільки системи команд мікропроцесорів різняться, кожен процесор має власний набір команд мовою асемблера.
За допомогою асемблера можна написати такі програми, які неможливо або дуже складно написати іншими мовами програмування. Наприклад: генератори ключів (keygen), системні монітори, драйвери для обладнання або навіть операційні системи.
Мови високого рівня ("C", "Pascal", "Delphi" і т.д.) не забезпечують надійного контролю за потоками даних, адресами пам'яті або регістрами процесора, а також всі вони були розроблені під певний вид операційної системи, а асемблер може стати тим самим асемблером, але працюючим на невідомій науці платформі, і робить програми під цю ж платформу.
Програми на асемблері, на відміну від програм, написаних мовами високого рівня виходять у десятки разів менше, а працюють у десятки разів швидше. Прикладом може бути операційна система MenuetOS, яка написана на Flat Assembler і що вміщається на одній дискеті (1.44 Мб), причому в комплект входять прикладні програми, такі як: редактор асемблерного коду з підсвічуванням, робота з файловою системою, 3d заставки, деяка кількість ігор, просмоторник картинок, компілятор Flat Assembler, термінал, CD плеєр та багато іншого. Перевага полягає в тому, що його можна швидко завантажити з інтернету (навіть за невеликої швидкості з'єднання).
На даний момент, більшість фахівців у галузі програмного забезпечення ведуть розробки мовами високого рівня, таких як Паскаль або С, що простіше при написанні програм, але найбільш потужне та ефективне програмне забезпечення повністю або частково написано мовою асемблера.

Література
1. Пітер Абель – Асемблер. Мова та програмування для IBM PC - М., 1999.

Асемблер

Асемблер(від англ. assembler - збирач) - компілятор вихідного тексту програми, написаної мовою асемблера, у програму машинною мовою.
Як і сама мова, асемблери, як правило, специфічні для конкретної архітектури, операційної системи та варіанта синтаксису мови. Разом з тим, існують мультиплатформні або зовсім універсальні (точніше, обмежено-універсальні, тому що мовою низького рівня не можна написати апаратно-незалежні програми) асемблери, які можуть працювати на різних платформах та операційних системах. Серед останніх можна також виділити групу крос-ассемблерів, здатних збирати машинний код і модулі (файли), що виконуються, для інших архітектур і ОС.
Асемблювання може бути не першим і не останнім етапом на шляху отримання модуля програми, що можна здійснити. Так, багато компіляторів з мов програмування високого рівня видають результат у вигляді програми мовою асемблера, яку надалі обробляє асемблер. Також результатом асемблювання може бути не здійсненний, а об'єктний модуль, що містить розрізнені блоки машинного коду і даних програми, з якого (або з кількох об'єктних модулів) надалі за допомогою редактора зв'язків може бути отриманий файл.
Спеціальні осередки пам'яті розташовані безпосередньо в процесорі. Робота з регістрами виконується набагато швидше, ніж з комірками оперативної пам'яті, тому регістри активно використовуються як у програмах мовою асемблера, і компіляторами мов високого рівня.
Назви регістрів походять від їхнього призначення:

EAX/AX/AH/AL (акумулятор register) - акумулятор;
EBX/BX/BH/BL (base register) - регістр бази;
ECX/CX/CH/CL (counter register) - лічильник;
EDX/DX/DH/DL (data register) - регістр даних;
ESI/SI (source index register) – індекс джерела;
EDI/DI (destination index register) - індекс приймача (одержувача);
ESP/SP (stack pointer register) – регістр покажчика стека;
EBP/BP (base pointer register) - регістр покажчика бази кадру стека.

Команди обробки рядків
Для роботи з рядками, або ланцюжками символів чи чисел (тобто попросту кажучи, з масивами довільних даних) в МП передбачено низку спеціальних команд:
movs - пересилання рядка;
cmps – порівняння двох рядків;
seas - пошук у рядку заданого елемента;
lods - завантаження акумулятора (регістрів AL або АХ) з рядка;
stos - запис елемента рядка з акумулятора (регістрів АХ чи AL).

Переваги

· Мова асемблера дозволяє писати найшвидший і компактніший код, який взагалі можливий для даного процесора.
· Швидкість роботи - за рахунок оптимізації обчислювального алгоритму та/або більш раціонального звернення до оперативної пам'яті (наприклад, якщо всі вихідні дані зберігаються в регістрах процесора, можна виключити зайві звернення до ВП), перерозподілу даних, табличного обчислення функцій;
· Обсяг коду (зокрема рахунок ефективного використання проміжних результатів). Скорочення обсягу коду також часто підвищує швидкість виконання програми.
· Забезпечення максимального використання специфічних можливостей конкретної платформи, що також дозволяє створювати ефективніші програми, у тому числі менш ресурсомісткі.
· При програмуванні на мові асемблера можливий безпосередній доступ до апаратури, і, зокрема, портів введення-виводу, регістрів процесора та ін. зависань».
· Мова асемблера часто застосовується для створення драйверів обладнання та ядра операційної системи, коли важливо тимчасове узгодження роботи периферійних пристроївіз центральним процесором.
· Мова асемблера використовується для створення "прошивок" BIOS.
· За допомогою мови асемблера часто створюються машинозалежні підпрограми компіляторів та інтерпретатори мов високого рівня, а також реалізується сумісність платформ.
· За допомогою програми дизассемблера можна зрозуміти алгоритми роботи досліджуваної програми за відсутності лістингу високорівневою мовою, вивчаючи лише машинні коди, але у складних нетривіальних програмах це дуже й дуже трудомістко.

Недоліки
· В силу машинної орієнтації ("низького" рівня) мови асемблера людині складніше читати та розуміти програму на ньому в порівнянні з мовами програмування високого рівня; Програма складається з занадто "дрібних" елементів - машинних команд, відповідно, ускладнюються програмування та налагодження, зростають трудомісткість та ймовірність внесення помилок.
· Потрібна підвищена кваліфікація програміста для отримання якісного коду: код, написаний середнім програмістом мовою асемблера, зазвичай виявляється не краще чи навіть гірше за код, що породжується оптимізуючим компілятором для порівняних програм написаних мовою високого рівня.
· Програма на мові високого рівня може бути перекомпільована з автоматичною оптимізацією під особливості нової цільової платформи, а програма на мові асемблера на новій платформі може втратити свою перевагу в швидкості без ручного переписування коду.
· Як правило, менша кількість доступних бібліотек порівняно із сучасними індустріальними мовами програмування.
· Відсутня переносимість програм на комп'ютери з іншою архітектурою та системою команд.

Сумісність
Програма, призначена для одного типу асемблерів, не може бути відкомпільована на іншому без радикального перероблення або автоматичної конвертації! Але навіть серед асемблерів "свого" типу спостерігається розбрід, різнобій і безліч відмінностей: ключових словах, у правилах оформлення лістингу, в бібліотеках і заголовних файлів і т. д. Якщо тільки сумісність не заявлена ​​явно, транслювати програму потрібно тим і тільки тим асемблером для якого вона призначена. В іншому випадку - готуйтеся до переробок (тобто до адаптації). Відмінності найчастіше виявляються в найнесподіваніших місцях. Деякі асемблери розуміють, що "mov eax, x" це те саме, що і "mov eax, [x]", деякі - ні. Вони спотикаються та видають помилку. Але ще нічого! Набагато гірше, коли транслятор мовчазно трактує цю конструкцію як "mov eax, offset x", що зовсім не те саме! Так що при перенесенні програми доводиться бути дуже обережним.

Сумісність операційних систем. Програми, орієнтовані на MS-DOS, не тільки не транспортабельні, а й непереносні. Для них характерна пряма взаємодія з обладнанням, доступна в NT тільки з ядерного рівня, не кажучи вже про те, що 16-розрядний код викликається з 32-розрядних програм лише через DPMI, та й то не без хитрощів.

Таким чином, перш ніж транслювати асемблерну програму, необхідно ототожнити для якого транслятора та операційної системи вона призначена! З асемблерним фрагментами, вихопленими з "рідного" контексту, доводиться ще гірше. Припустимо, в деякій статті описується цікавий антиналагоджувальний прийом і наводиться асемблерний код, але як вбудувати його в свою програму - не йдеться. Знайома ситуація, чи не так? Безпосередня трансляція неможлива - транслятор дико матюкається, але нічого не каже.

Асемблювання програми

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

Asm --> .obj --> .exe/.dll/.com

На першій стадії (.asm->.obj) з асемблерного файлу шляхом компіляції виходять файли проміжного об'єктного коду, що має розширення.obj (при цьому можуть використовуватися додаткові inc-файли). Файл з розширенням.obj містить оптимізований машинний код за умови, що не зустрілися синтаксичні та семантичні помилки. Якщо в вихідному файліз програмою мовою асемблера виявляються помилки, то програмісту видається список виявлених помилок, у якому помилки вказуються з номером рядка, де вони виявлено. Програміст циклічно виконує дії з редагування та компіляції доти, доки не будуть усунені всі помилки у вихідному файлі. На цьому етапі вже можливе отримання готової програмиАле найчастіше в ній не вистачає деяких компонентів. Якщо компілятор з будь-якої причини (неправильно прописаний шлях до такого файлу або файл відсутній) не може знайти inc-файл, видається попередження і obj-файл отриманий не буде.

Асемблювання, як правило, проходить у два прийоми. При першому проході переводяться мнемонічні команди, десяткові числа і символи у відповідні машинні коди, підраховується, скільки команда займає місця, виявлені імена, введені користувачем (константи, мітки, змінні) їх тип і числове значення записується в таблицю. У цю таблицю записується, з яких адрес починаються процедури, адреси міток, адреси початку/кінця сегментів і т. д., при другому проході підставляються адреси початку процедур, замінюються назви міток на адреси.

В результаті асемблювання виходить так званий "об'єктний файл". Як додаткова можливість асемблер може створити файл лістингу програми.

Зазвичай для отримання файлів об'єктного коду необхідно виконати відповідну програму асемблера (програми ML.EXE фірми Microsoft та TASM.EXE фірми Borland), вказавши в командному рядкуНазва файлу з текстом програми.

Ця форма виклику є мінімально необхідною. Крім імені текстового файлу, необхідно вказувати опції асемблювання. Більш детальну інформацію про опції програми асемблювання слід шукати у документації до цих програм.

Компонування програми

Наступна стадія (.obj --> .exe/.dll/.com) називається лінківкою або компонуванням і служить для заміщення символьних імен, що використовуються програмістом, на реальні адреси.

Порівняйте шістнадцятковий вміст OBJ і EXE файлу, який у вас вийшов. У EXE-файлі є та ж послідовність байтів, що і в OBJ-файлі. Але крім цього ще є: ім'я асембльованого файлу, версія асемблера, "власне ім'я" сегмента і так далі.

Це "службова" інформація, призначена для тих випадків, коли ваш здійснений файл ви хочете зібрати з кількох. При розробці великих додатків вихідний текст складається, як правило, з кількох модулів (файлів з вихідними текстами), тому що зберігати всі тексти в одному файлі незручно - складно орієнтуватися.

Кожен модуль окремо компілюється в окремий файл з об'єктним кодом. У кожному з цих файлів прописані свої сегменти коду/даних/стека, які потім об'єднати в одне ціле. А файл можна нам отримати лише один - з єдиним сегментом коду/даних/стека. Саме це LINK і робить: завершує визначення адресних посилань та об'єднує, якщо це потрібно, дещо програмних модулівв один. І цей один у нас і є здійсненним.

Крім того, до наших модулів треба додати машинний код підпрограм, що реалізують різні стандартні функції (наприклад, які обчислюють математичні функції SIN або LN). Такі функції містяться в бібліотеках (файлах зі стандартним розширенням.LIB), які або постачаються разом із компілятором, або створюються самостійно. Тому процес підготовки обов'язково включає етап компонування, коли визначаються всі невідомі при роздільному асемблюванні адреси спільно використовуваних змінних або функцій.

Процес об'єднання об'єктних модулів в один файл здійснюється спеціальною програмою-компонувальником або збирачем (програма LINK.EXE фірми Microsoft та TLINK.EXE фірми Borland), яка виконує зв'язування об'єктних модулів та машинного коду стандартних функцій, Знаходячи їх у бібліотеках, і формує на виході працездатний додаток - здійсненний код для конкретної платформи.

Здійснюваний код - це закінчена програма з розширенням COM, DLL або EXE, яку можна запустити на комп'ютері зі встановленою операційною системоюдля якої ця програма створювалася. Ім'я файлу, що виконується, задасться ім'ям першого.OBJ файлу. Для лінківки потрібно в командному рядку набрати:

link prog1.obj prog2.obj або tlink prog1.obj prog2.obj

Вміст об'єктного файлу аналізується компонувальником. Він визначає, чи є у програмі зовнішні посилання, тобто чи містить програма команди викликів процедур, що у однієї з бібліотек об'єктних модулів (link library). Компонувальник знаходить ці посилання в об'єктному файлі, копіює необхідні процедури з бібліотек, об'єднує їх разом з об'єктним файлом і створює файл, що виконується (executable file). В якості додаткових можливостейкомпонувальник може створити файл перехресних посилань, що містять план отриманого файлу, що виконується.

Використовувані джерела
1. https://ua.wikipedia.org/
2. http://natalia.appmat.ru/
3. http://www.codenet.ru/
4. http://wasm.ru/
5. Нортон П., Соухе Д. Мова асемблера для IBM PC. М: Комп'ютер, 1992.

 

 

Це цікаво: