Визначення типу процесора та об’єму оперативної пам’яті
Порівняльна характеристика мов програмування. Особливості та переваги асемблера. Принцип побудови програми та її алгоритму. Розробка її коду на мові асемблер. Функції команди переривання INT. Трансляція програми та пошук помилок. Iнструкцiя користувача.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 07.05.2014 |
Размер файла | 43,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Вступ
Перші мови програмування виникли відносно недавно. Як і слід було очікувати, перші мови програмування, як і перші ЕОМ, були досить примітивні й орієнтовані на чисельні розрахунки. Це були і суто теоретичні наукові розрахунки (перш за все, математичні та фізичні), і прикладні завдання, зокрема, у галузі військової справи.
Програми, написані ранніми мовами програмування, представляли собою лінійні послідовності елементарних операцій з регістрами, в яких зберігалися дані.
Друга половина ХХ століття ознаменувалася появою мов програмування так званого "високого рівня", порівняно з раніше розглянутими попередниками, відповідно іменованими низькорівневими мовами. Крім того, з появою мов високого рівня залежність реалізації від апаратного забезпечення істотно зменшилася. Платою за це стала поява спеціалізованих програм, які перетворюють інструкції мов у коди тієї або іншої машини, або трансляторів, а також деяка втрата у швидкості обчислень, яка, втім, компенсувалася істотним виграшем у швидкості розробки додатків і уніфікацією програмного коду. Природно, що для навчання новим мовам програмування було потрібно багато часу і коштів, а ефективність реалізації на колишньому апаратному забезпеченні знижувалася. Проте це були тимчасові труднощі, та, як показала практика програмування, багато перших мов високого рівня виявилися настільки вдало реалізованими, що активно використовуються й сьогодні.
1. Аналiз та вибiр мови програмування для виконання курсового проекту
1.1 Порiвняльна характеристика мов програмування
Мова програмування - це формальна мова, що забезпечує зручний опис конкретних проблем, сформульованих людиною й розв'язуваних за допомогою комп'ютера.
Мовою програмування пишеться програма, що дозволяє при її виконанні комп'ютером (обчислювальною системою) одержати конкретні результати.
Мова програмування складається з двох складових: синтаксису та семантики
Перехід від мовних конструкцій до машинних команд здійснює транслятор мови. Та сама мова програмування може бути представлена різними реалізаціями, тобто зберігаються основні принципи й ідеї мови, розробляються зовсім різні транслятори, у синтаксисі допускаються деякі відмінності.
Мови програмування розділяються на мови високого й низького рівня відповідно до тем, у яких термінах слід описувати завдання. Якщо мова близька до природнього, вона називається мовою високого рівня, якщо ближче до машинних команд -- мовою низького рівня. Наприклад, мови С, Бейсік, Паскаль, Пролог -- мови високого рівня, а мова Асемблера -- мова низького рівня.
Мови високого рівня можуть бути декларативними (Пролог, ЛИСП) і процедурно-оріентованими (С, Бейсік, Паскаль, Ада). Процедурні мови розвиваються в об'єктно-орієнтовані.
Та сама мова програмування може бути реалізована у вигляді компілятора або інтерпретатора. Наприклад, Quick Basic -- компілятор, MSX Basic -- інтерпретатор.
В останній час з'явилися мови змішаного типу. Вони можуть бути як компіляторами, так і інтерпретаторами залежно від бажання користувача, наприклад мова програмування в СУБД Foxpro.
Розрізняють мови універсальні та спеціалізовані, до останніх можно віднести мови керування базами даних.
Можна спостерігати тенденцію розвитку мов програмування убік більшої описовості: від принципу «як робити» до принципу «що робити». Мови також стають усе більш незалежними від типів комп'ютерів.
Деякі автори розділяють мови, як і комп'ютери, по поколіннях.
Мови першого покоління: машинно-орієнтовані з ручним керуванням пам'яті на комп'ютерах першого покоління.
Мови другого покоління: із мнемонічною виставою команд, так звані автокоди.
Мови третього покоління: загального призначення, використовувані для створення прикладних програм будь-якого типу. Наприклад: Бейсік, Кобол, С та Паскаль.
Мови четвертого покоління: удосконалені, розроблені для створення спеціальних прикладних програм, для керування базами даних. Наприклад, мови програмування сумісні з dbase, SQL.
Мови програмування п'ятого покоління: мови декларативні, об'єктно-орієнтовані й візуальні . Наприклад, Пролог, ЛИСП, C++, С#, Visual Basic, Delphi.
З появою мережі Internet зв'язана розробка спеціалізованих мов програмування, які є інтерпритуємими. Інтерпретатори для них вбудовані в браузери. Це мови HTML, Javascript, Perl.
1.2 Особливостi та переваги вибраноi мови програмування
Асемблер - це мова програмування, що дозволяє писати програми на машинному рівні, використовуючи при цьому умовні скорочення - мнемокоди, які транслюються асемблером у машинні команди.
Команди мови асемблера один до одного відповідають командам процесора. Фактично, вони і являють собою більш зручну для людини символьну форму запису команд і їх аргументів - мнемокод. При цьому одній команді мови асемблера може відповідати кілька варіантів команд процесора.
Крім того, мова асемблера дозволяє використовувати символічні мітки замість адрес елементів пам'яті, які при асемблюванні замінюються на обчислювані ассемблером або компоновщиком абсолютні або відносні адреси, а також так звані директиви.
Директиви асемблера дозволяють включати блоки даних, задати ассемблювання фрагмента програми по умові, задати значення міток, використовувати макрокоманди з параметрами.
Переваги мови Асемблер:
- Мова асемблера дозволяє писати найшвидший і компактніший код, який взагалі можливий для даного процесора ;
- Якщо код програми досить великий, - дані, якими він оперує, не поміщаються цілком у регістрах процесора, тобто частково або повністю знаходяться в оперативній пам'яті, - то програміст, як правило, здатний значно оптимізувати програму в порівнянні з транслятором з мови високого рівня по одному або декільком параметрам і створити код близький до оптимального по Парето (як правило, швидкодія програми досягається за рахунок подовження коду і навпаки );
- Забезпечення максимального використання специфічних можливостей конкретної платформи, що також дозволяє створювати більш ефективні програми, в тому числі менш ресурсомісткі;
- При програмуванні на мові асемблера можливий безпосередній доступ до апаратури і, зокрема, портів вводу-виводу, регістрів процесора та ін;
- Мова асемблера часто застосовується для створення драйверів устаткування і ядра операційної системи (або машинозалежних підсистем ядра ОС), тоді, коли важливо тимчасове узгодження роботи периферійних пристроїв з центральним процесором;
- Мова асемблера використовується для створення « прошивок » BIOS;
- За допомогою мови асемблера часто створюються машинозалежні підпрограми компіляторів та інтерпретаторів мов високого рівня, а також реалізується сумісність платформ;
- За допомогою програми дизасемблера можна зрозуміти алгоритми роботи досліджуваної програми за відсутності лістингу на високорівневій мові, вивчаючи тільки машинні коди, але в складних нетривіальних програмах це є дуже і дуже трудомістким.
Недоліки мови Асемблер:
- В силу машинної орієнтації («низького» рівня) мови асемблера людині складніше читати і розуміти програму на ньому у порівнянні з мовами програмування високого рівня;
- Програма складається з надто «дрібних» елементів - машинних команд. Відповідно, ускладнюються програмування та налагодження, ростуть трудомісткість і ймовірність внесення помилок;
- Потрібна підвищена кваліфікація програміста для отримання якісного коду: код, написаний середнім програмістом на мові асемблера, зазвичай виявляється не краще або навіть гірше коду, породжуваного компілятором з оптимізацією для порівнянних програм, написаних мовою високого рівня;
- Програма мовою високого рівня може бути перекомпільована з автоматичною оптимізацією під особливості нової цільової платформи, програма ж мовою асемблера на новій платформі може втратити свою перевагу в швидкості без ручного переписування коду;
- Як правило, менша кількість доступних бібліотек в порівнянні з сучасними індустріальними мовами програмування;
- Відсутня переносимість програм на комп'ютери з іншою архітектурою і системою команд.
Синтаксис мови асемблер визначається системою команд конкретного процессора.
Типовими командами мови ассемблер є:
- Команди пересилки даних (mov та ін.);
- Арифметичні команди (add, sub, imul та ін.);
- Логічні та побітові операції (or, and, xor, shr та ін.);
- Команди управління ходом виконання програми (jmp, loop, ret та ін.);
- Команди виклику переривань: int;
- Команди вводу-виводу в порти (in, out);
- Для мікроконтролерів та мікрокомп'ютерів характерні також команди, які виконують перевірку та перехід за умовою, наприклад:
- cjne -- перейти, якщо не дорівнює;
- djnz -- декрементувати та якщо результат не нульовий, то перейти;
- cfsneq -- зрівняти та якщо не дорівнює, пропустити наступну команду.
Написання програми мовою асемблер відбувається в кілька етапів:
1) Написання програми в текстовому редакторі за допомогою мнемокодів асемблера та присвоєння їй імені з розширенням asm-***.asm. Для створення нового файлу потрібно запустивши файловий менеджер FAR, нажати клавіші Shift та F4. В вікні яке появилося набрати ім'я файлу та присвоїти розширення asm. Наприклад: Prog1.asm. В створеному файлі набрати программу;
2) переведення (трансляція) програми в машинні коди, яке здійснюється за допомогою спеціальної програми Tasm.exe або Masm.exe. Для виконання трансляції можна використовувати командний рядок наступного формату: TASM [опції] ім'я_початкового_файла [,ім'я_об'єктного_фай-ла] [,ім'я_файла_листинга] [,ім'я_файла_перехресних_посилань]
Інформація, яка задана в квадратних дужках не є обов'язковою для задавання. Якщо не задати імена файлів, показаних в квадратних дужках, буде сформовано відповідні файли з іменем початкового файла. Наприклад: Tasm.exeProg1.asm. У результаті роботи транслятора створюється програма в об'єктних кодах з розширенням obj (***.obj) і файл лістингу (***.lst) - Prog1.lst та Prog1.obj. Об'єктний файл містить програму в кодах команд ЕОМ, а також дані для корекції адресних частин команд при об'єднанні декількох об'єктних файлів в одну програму.
Файл лістингу містить результати трансляції кожного рядка програми мовою асемблер, сам рядок програми та діагностичні повідомлення.
При виникненні в програмі звертання до міток замість міток підставляються їхні адреси.
3) створення виконавчої програми, що здійснюється за допомогою програми редактора зв'язків (компонувальник, лінкувальник) Tlink.exe. Для створення виконавчої програми можна використовувати командний рядок такого формату: TLINK [опції] список об'єктних файлів [,ім'я_завантажувального_модуля] [,ім'я_файла_карти] [,ім'я файла_ бібліотеки] Вхідними файлами редактора зв'язків є об'єктні файли, які можуть розташовуватися також у бібліотечних. Список об'єктних файлів складається з компонованих файлів з розширенням ***.obj. Ці файли можуть бути розділені пропусками або знаком "+". Якщо не вказати ім'я завантажувального модуля, то буде створено завантажувальний файл з першим іменем зі списку об'єктних файлів типу ***.exe.
2. Індивідуальне завдання
2.1 Теоретична частина
При написанні програми для визначення типу процесора та об'єму оперативної пам'яті я використовував переривання 11Н.
Команди переривання дозволяють скористатися вбудованими системними ресурсами з програми користувача. Під системними ресурсами розуміються програми, що входять в головну виконавчу програму ЕОМ, яка називається BIOS - базова система введення-виведення. У функції цієї системи входить: запам'ятовування символів, що набираються на клавіатурі, зображення символів на екрані дисплея, обмін даними між пристроями, приєднаними до ЕОМ. Щоб звернутися до цих можливостей ЕОМ, призначена для користувача програма повинна бути перервана і виконана системна функція, а потім виконання користувальницької програми має бути продовжено з наступного після звернення до системних функцій команди. Ці функціональні можливості і виконують команди переривання.
У команді переривання INT тип_переривання являє собою номер переривання, яких в ЕОМ IBM налічується 256.
Кожному перериванню в пам'яті ЕОМ відповідає вектор переривання (ці вектора розміщені в оперативній пам'яті, починаючи з нульового адреси). Кожен вектор переривання розміщується в 32 - бітової комірці пам'яті і являє собою адресу, за якою розміщена власне програма переривання. По суті такі програми дуже схожі на процедури, відмінність в тому, що програма переривання закінчується командою повернення IRET.
Окремо розглянемо тип переривань: команду DOS INT 11H для виведення на екран і введення з клавіатури.
Команда INT перериває обробку програми, передає управління в DOS або BIOS для певної дії і потім повертає управління в перервану програму для продовження обробки. Найбільш часте переривання використовується для виконання операцій введення або виведення.
Для виходу з програми на обробку переривання і для подальшого повернення команда INT виконує наступні дії:
- зменшує покажчик стека на 2 і заносить у вершину стека вміст регістра прапорців;
- очищає прапорці TF і IF;
- зменшує покажчик стека на 2 і заносить вміст регістра CS в стек;
- зменшує покажчик стека на 2 і заносить в стек значення командного покажчика;
- забезпечує виконання необхідних дій;
- відновлює із стека значення регістра і повертає управління в перервану програму на команду, наступну після INT.
Цей процес виконується повністю автоматично. Необхідно лише визначити сегмент стека достатньо великим для запису в нього значень регістрів.
2.2 Опис та принцип побудови програми
Програма для визначення типу процесора та об'єму оперативної пам'яті написана на мові Асемблер дає можливість повного доступу до апаратної частини комп'ютера. Програма написана на мові Асемблер є «зрозумілою» для процесора, а її програмний код досить компактний і займає незначну частину оперативної пам'яті при завантаженні її на виконання.
На відміну від мов програмування високого рівня, мова Асемблера поставляється без середовища розробки програм. Тому розробнику доводиться самостійно контролювати весь процес створення програми. Для мови Асемблера цей процес включає в себе наступні етапи:
- Постановка завдання (точний і докладний опис функціональності майбутньої програми, а також опис всіх вхідних і вихідних даних і способу їх передачі програмі);
- Розробка алгоритму програми (побудова блок-схеми, графічної схеми, текстовий або математичний опис рішення);
- Формалізація алгоритму (запис алгоритму мовою програмування). Створення текстового файлу програми з розширенням .Asm (наприклад my.asm). Відсутність середовища розробки дозволяє програмісту самостійно вибрати текстовий редактор для написання коду програми. Для цієї мети підійде будь-який текстовий редактор з нумерацією рядків, ми рекомендуємо редактор, вбудований в оболонку " FAR Manager ";
- Компіляція програми. Компіляція - процес перекладу програми з текстового вигляду в машинний код. При використанні компілятора фірми Borland необхідно виконати: tasm my.asm. Тобто запускаємо компілятор tasm і передаємо з командного рядка ім'я файлу, що містить програму. Якщо програма має синтаксичні помилки, компілятор видасть повідомлення про помилку з зазначенням номера рядка і описом для кожної помилки (потрібно повернутися на етап № 3 і виправити синтаксичні помилки). У разі успішної компіляції буде створений файл, що містить об'єктний код програми my.obj, який ще не є виконуваним модулем.
- Компонування програми. Компонування - створення з файлу об'єктного коду виконуваного модуля (tlink my.obj). Як параметр компонувальник tlink приймає ім'я файлу містить об'єктний код програми (у нашому випадку - my.obj). У разі успішної компонування буде створений виконуваний модуль my.exe.
- Запуск і тестування виконуваного модуля програми. На даному етапі необхідно перевірити, чи відповідає написана програма постановці завдання, зробленої нами на етапі №1. Неправильна робота програми говорить про алгоритмічної помилку (семантична помилка), тому для успішного її усунення потрібно повернутися на етап розробки алгоритму ( етап № 2).
Текст програми на Асемблері містить наступні операції:
- команди або інструкції;
- директиви чи псевдо оператор;
- оператори;
- зумовлені імена.
Турбо Асемблер створює в результаті асемблювання тільки об'єктний файл. Отримати файл лістингу можна декількома способами - вказавши ключі /l або /la, або задавши ім'я файлу лістингу в командному рядку TASM. У верхній частині кожної сторінки лістингу виводиться заголовок, який складається з версії Турбо Асемблера (за допомогою якого виконане асемблювання файлу), дати і часу асемблювання і номера сторінки лістингу.
Лістинг складається з двох частин: розширеного початкового тексту програми і таблиці ідентифікаторів (Symbol Table).
Всі помилки і попередження, знайдені при асемблюванні, включаються в лістинг безпосередньо за тим рядком, де вони зустрілися, і дублюються в кінці лістингу.
Програма в машинному коді складається з різних сегментів для визначення даних, для машинних команд і для сегменту, названого стеком для зберігання адрес. Для виконання арифметичних дій, пересилки даних і адресації комп'ютер має ряд регістрів.
Для виконання програм комп'ютер тимчасово записує програму дані в основну пам'ять. Він має також ряд регістрів, які використовує для тимчасових обчислень.
Мінімальною одиницею інформації в комп'ютері є біт. Біт може бути вимкнений, якщо його значення є нуль, або включений, тоді його значення рівне одиниці. Єдиний біт не може представити багато інформації на відміну від групи бітів.
3. Опис алгоритму програми
Алгоритм - послідовність, система, набір систематизованих правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певного класу задач після скінченного числа операцій. При написанні комп'ютерних програм алгоритм описує логічну послідовність операцій. Для візуального зображення алгоритмів часто використовують блок-схеми.
Блок-схема алгоритму - це графічне представлення логічної структури алгоритму, де кожний етап обробки інформації зображається у вигляді геометричних символів (блоків).
Існують правила зображення блок-схем алгоритмів. Кожен алгоритм має початок та кінець. Кожна команда алгоритму представляється у вигляді геометричних символів, які мають певну конфігурацію, в залежності від характеру дій, що будуть виконуватись. Геометричні символи з'єднуються між собою лініями або стрілками, які вказують порядок виконання дій.
Основні графічні символи занесені до Таблиці 1.
Таблиця 1
Найменування |
Позначення |
Функція |
Термінатор |
Размещено на http://www.allbest.ru/
Елемент відображає вхід із зовнішнього середовища або вихід з неї. Всередині фігури записується відповідна дія. |
Процес |
Размещено на http://www.allbest.ru/
Виконання однієї або кількох операцій, обробка даних будь-якого виду. Всередині фігури записують безпосередньо самі операції. |
Рішення |
Размещено на http://www.allbest.ru/
Показує рішення або функцію перемикального типу з одним входом і двома або більше альтернативними виходами, з яких тільки один може бути обраний після обчислення умов, визначених всередині цього елементу. |
Зумовлений процес |
Размещено на http://www.allbest.ru/
Символ відображає виконання процесу, що складається з однієї або кількох операцій, що визначені в іншому місці програми. |
Дані |
Размещено на http://www.allbest.ru/
Перетворення у форму, придатну для обробки (введення) або відображення результатів обробки (виведення). |
З'єднувач |
Размещено на http://www.allbest.ru/
Символ відображає вихід в частину схеми і вхід з іншої частини цієї схеми. Використовується для обриву лінії та продовження її в іншому місці. |
Алгоритм для програми, що виводить тип процесору та об'єм оперативної пам'яті.
В першому блоці запускається програма. У наступному блоці відбувається оголошення змінних, що присутні в нашій програмі. Далі проходить виведення повідомлення на екран, а в наступному кроці - виклик процедури Near. П'ятий блок алгоритму - розміщення в вершині стеку вмісту регістра прапорців. На шостому кроці відбувається порівняння процесора з і8086. Після чого отримуємо інформацію про існуючий процесор. Восьмий блок виводить інформацію про процесор на екран. Розрахунок об'єму оперативної пам'яті проходить на дев'ятому етапі роботи програми. Наступний крок відповідає за виведення на екран повідомлення про оперативну пам'ять. Завершальний блок програми відповідає за завершення її роботи.
Представлення алгоритму у вигляді блок-схем має ряд переваг завдяки своїй наочності, що забезпечує, високу читаність алгоритму і чітке відображення управління в ньому.
програмування асемблер код
4. Розробка коду програми
4.1 Розробка коду програми на вибранiй мовi програмування
Код програми визначення типу процесора:
.model small
.586
.data
i8086mes db "i8086",13,10,'$'
cpu db "CPU: ",0,0,0,0,0,0,0,0,0,0,0,0,10,13,'$'
ten db 10
mem db 13, 10, 'memory: $'
.stack 100h
.code
print macro mess
mov dx,offset mess
mov ah,09h
int 21h
endm print
main proc near
mov ax,@data
mov ds,ax
pushf
pop ax
and ax,0F000h
cmp ax,0
cmp ax,0F000h
je i8086
;cpu
mov eax,0
cpuid
mov dword ptr cpu+5,ebx
mov dword ptr cpu+9,edx
mov dword ptr cpu+13,ecx
print cpu
mov eax,ecx
and eax,00003000h
shr eax,12
cmp eax,0
jmp exit
i8086:
print i8086mes
mov ah, 9
mov dx, offset mem
int 21h
XOR CX, CX
XOR DX, DX
MOV AX, 0E801h
INT 15h
MOV AX, CX
MOV BX, DX
.USEAX:
shr bx, 4
add ax, bx
call OutInt
exit:
mov ax,4C00h
int 21h
main endp
numtostr proc near
mov byte ptr [bx+di],'0'
output:
div ten
cmp ax,0
je _out
add ah,30h
mov [bx+di],ah
xor ah,ah
dec di
jmp output
_out:
retn
numtostr endp
OutInt proc
oi1:
xor cx, cx
mov bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
xor dx,dx
div bx
push dx
inc cx
test ax, ax
jnz oi2
mov ah, 02h
oi3:
pop dx
oi4:
add dl, '0'
int 21h
loop oi3
ret
OutInt endp
end main
Код програми визначення об'єму оперативної пам'яті:
.model tiny
.code
org 100h ; СОМ-программа
start:
mov dx, offset memory ; вывод надписи
mov ah,09
int 21h
int 12h ; получаем количество основной памяти
push ax
xor cx, cx
mov bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
xor dx,dx
div bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
push dx
inc cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
test ax, ax
jnz oi2
; Теперь приступим к выводу.
mov ah, 02h
oi3:
pop dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
add dl, 30h
int 21h
; Повторим ровно столько раз, сколько цифр насчитали.
loop oi3
pop ax
mov dx,offset kb; выведем на экран строку "kb"
mov ah,09
int 21h
mov ah,1
int 21h
ret
.data
memory db "memory is $" ; $ - конец строки
kb db " Kb",0Dh,0Ah,"$"; 0dh,0ah - это перевод строки
end start
4.2 Трансляцiя програми та пошук помилок
Транслятор - програма або технічний засіб, що виконує трансляцію програми.
Трансляція програми - перетворення програми, представленої на одній з мов програмування, в програму на іншій мові і, у певному сенсі, рівносильну першій.
Трансляція виконує внутрішнья та можетисяо два проходи початкового тексту. У процесі трансляції відбувається створення таблиці міток і присвоєння міткам адрес розташування.
Транслятор зазвичай виконує також діагностику помилок, формує словники ідентифікаторів, видає для друку тексти програми і т. д.
Мова, на якому представлена ??вхідна програма, називається вихідною мовою, а сама програма - вихідним кодом. Вихідна мова називається цільовою мовою або об'єктним кодом.
4.3 Розробка iнструкцii користувача
Допускалось, що для того, щоб визначити адресу деякої комірки пам'яті потрібно знати дві складові цієї адреси: адресу початкового сегменту та адресу зміщення комірки пам'яті від початку сегменту. Адреси початків сегментів знаходяться у відповідних сегментах регістрах CS, DS, SS, ES - змінюючи вміст цих регістрів можна дістати доступ до тих чи інших ділянок пам'яті, тому такий запис легко зламати. Тому в процесорі 386 в захищеному режимі роботи адреси початків сегментів, їх довжини та права доступу зберігаються в спеціальних системних одиницях.
Програма буде виконуватись, якщо змінити адресу початку сегменту. Це означає, що в пам'яті він буде перенесений в інше місце. При цьому відносне зміщення в сегменті не можна зміщувати. Це дозволить переносити програму в пам'яті навіть під час її виконання. Використання сегментації пам'яті дозволяє різко збільшити розміри пам'яті, яку можна використати. В деяких випадках використовувати сегментацію недоцільно. Тому в старших моделях можна працювати із сегментами довжиною до 4Гб. Це означає, що вся фізична пам'ять розглядається як один сегмент.
В реальному режимі роботи оперує з 4-ма сегментами:
Сегмент коду;
Сегмент даних;
Сегмент стеку;
Сегмент додаткових даних.
Для процесорів 386 з'явились ще 2 сегменти додаткових даних. Ці сегменти в пам'яті можуть розташовуватись як завгодно по відношенню один до одного. Ніяких обмежень на їх розташування немає. Сегменти можуть починатись з однієї адреси, тобто можуть перекриватись. Вони можуть розташовуватись в пам'яті без перекривання, або між ними можуть бути проміжки.
Для визначення адреси наступної команди після виконання попередньої використовують 2 регістри: CS (регістр сегменту коду, він містить початок адресу цього сегменту), і IP (регістр вказівника команд, якість зміщення команди відносно початку сегменту). В процесі виконання програми вміст ІР автоматично змінюється. Якщо змінити вміст регістрів CS, та ІР, то виклик програми почнеться з іншої адреси. Але явним чином змінити вміст цих регістрів неможливо. Це можна зробити тільки при використані деяких команд. Наприклад при виклику підпрограми. Або виконані програми безумовного переходу. Як уже відмічалось в сегменті коду можна також описувати дані. Але це роблять тільки в обґрунтованих випадках, наприклад в програмі обробки переривань.
5. Новітнє в предметі. Перспективи розвитку
Мова низького рівня -- мова асемблера -- після смерті" MS-DOS, здавалося, доживає останні дні. Але всупереч прогнозам він не зійшов з арени і продовжує вельми широко використовуватися при розробці програм. Мова асемблера -- це мова, на якій "говорить" процесор, і зникнути він може тільки разом із зникненням процесорів! З цієї ж причини асемблер має одну фундаментальну перевагу перед мовами високого рівня: він найшвидший. Більшість додатків, що працюють в режимі реального часу, або написані на асемблері, або використовують в критичних ділянках коди асемблерні модулі. Нерідко можна чути твердження про те, що процес розробки програм на мові асемблера дуже трудомісткий і віднімає масу часу. Ще однією перешкодою для роботи з асемблером рахують його складність. І, нарешті, як аргумент приводиться твердження, що розробка додатків на асемблері сильно утруднена через відсутність сучасних інструментальних засобів для проектування і відладки. Такі твердження, взагалі-то, не відповідають дійсності. Мова асемблера не складніше за інші мови програмування і досить легко освоюється як досвідченими, так і початкуючими програмістами. Крім того, останніми роками з'явилися дуже могутні інструментальні засоби розробки програм на асемблері, і це вимушує по-іншому поглянути на процес розробки програм на цій мові. Серед таких інструментальних засобів проектування можна назвати макроассемблер.
Висновки
Еволюція засобів проектування програм протягом останніх десятиліть здатна здивувати будь-яку людину, програмного забезпечення, що займається розробкою. Особливо це стосується написання програм для операційних систем сімейства Windows. Сучасні інструментальні засоби настільки розвинені, що розробник програмного забезпечення може отримати готову програму за допомогою декількох клацань. Величезна кількість книг, статей і початкових текстів програмної коди присвячено проектуванню програм на Pascal, Basic і інших мовах програмування.
Асемблерні програми можуть бути дуже ефективними. Як ви побачите, мова асемблера вимагає від вас планування кожної дії комп'ютера. У невеликих програмах це дозволяє оптимізувати роботу програми з апаратними засобами. У великих же програмах величезна кількість деталей може перешкодити вам еффективно працювати над самою програмою, навіть якщо окремі компоненти програми виявляться дуже непоганими. Безумовно, програмування на мові асемблера відповідає потребам не кожної програми. Програми на мові асемблера дуже точні. Оскільки ця мова дозволяє програмістові безпосередньо працювати зі всім апаратним забезпеченням, асемблерна програма може робити те, що недоступно ніякий іншій програмі. Поза сумнівом, що в програмуванні пристроїв введення-виводу, де потрібний контроль над окремими розрядами регістрів пристроїв, програмування на мові асемблера - єдиний відповідний вибір. Тільки через написання програм на цьому рівні деталізації ви можете зрозуміти як працює машина на самому ніжнем рівні. Якщо ви хочете дізнатися про комп'ютер все, ви повинні бути знайомі з його мовою асемблера. Єдиний спосіб добитись цього - писати програми на цій мові.
Список використаних джерел
1. Дудзяний І.М., Черняхівський В.В. «Програмування мовою Асемблера» Львів: Видавничий центр ЛНУ імені Івана Франка, 2002. - 112 с;
2. Юров В.І. - Assembler. Підручник для вузів 2-е видання, Питер, - 637 с.:ил;
Размещено на Allbest.ru
Подобные документы
Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.
контрольная работа [50,3 K], добавлен 12.08.2012Реалізація програми на мові асемблера для процесора i8086. Регістрова структура процесора. Використання сегментних регістрів для апаратної підтримки найпростішої моделі сегментованої пам'яті. Формування арифметичних прапорців. Система команд процесора.
контрольная работа [240,5 K], добавлен 27.02.2013Створення двух файлів В1 і В2 з шести двоцифрових цифр з введенням в довільному порядку цифр з клавіатури із записуванням парних цифр в файл В3, а непарних - у файл В4. Процес розробки програми за допомогою мови "Асемблер". Блок-схема алгоритму задачі.
курсовая работа [37,6 K], добавлен 26.11.2011Основні розрахунки резисторів мікросхеми. Розробка алгоритму рішення задачі методом блок-схем. Характеристика та розробка програми на мові С++ з використанням принципів модульного і структурного програмування. План тестування і налагоджування програми.
курсовая работа [2,9 M], добавлен 05.12.2012Загальна структура комп'ютера, архітектура процесора типу Intel 8086. Принцип роботи пам'яті, її види (постійна та оперативна). Основи програмування на мові асемблер та її синтаксис. Особливості використання позначок, кодів команд, операндів і директив.
лабораторная работа [36,0 K], добавлен 27.02.2013Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.
курсовая работа [14,1 K], добавлен 08.08.2009Розробка програми-інтерпретатора функцій командного процесора DOS: TIME, DATE, DIR, CD, MD, RD на мові Асемблера. Функціональні модулі, процедури та макроси, які використовуються в програмі. Опис алгоритму розв’язання задачі, його програмна реалізація.
курсовая работа [42,6 K], добавлен 26.04.2016Створення програми з нетривіальною логікою на мові Асемблер, реалізуючи запропонований алгоритм за допомогою команд розгалуження та циклу. Механізми передачі керування та зміна послідовності виконання команд. Типи адресації. Команди умовного переходу.
лабораторная работа [390,3 K], добавлен 27.02.2013Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.
курсовая работа [991,4 K], добавлен 06.08.2013Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.
курсовая работа [460,9 K], добавлен 04.03.2014