Вступ
Мікропроцесори корпорації Intel і персональні комп'ютери на їх базі пройшли не дуже довгий у часі, але значний за сущністю шлях розвитку, протягом якого кардинально змінювалися їхні можливості і навіть самі принципи їхньої архітектури.
У той же час, вносячи в мікропроцесор принципові зміни, розробники були ви ¬ потреб постійно мати на увазі необхідність забезпечення сумісності ¬ єю нових моделей зі старими, щоб не відлякувати потенційного покупця перспективою повної заміни освоєного або розробленого їм програмного забезпечення. У результаті сучасні мікропроцесори типу Pentium, забезпечуючи такі можливості, як 32-бітну адресацію майже необмежених обсягів пам'яті, багатозадачний режим з одночасним виконанням декількох програм, апаратні засоби захисту операційної системи і прикладних програм один від одного, багатий набір додаткових ефективних команд і способів адресації, в той же час можуть працювати (і часто працюють) в режимі перших мікропроцесорів типу 8086, використовуючи всього лише 1 мегабайт оперативної пам'яті, 16-розрядні операнди (тобто числа в діапазоні до 216-1 = 65535) і обмежений склад команд. Оскільки програмування на мові асемблера безпосередньо зачіпає апаратні можливості мікропроцесора, перш за все, слід з'ясувати, якою мірою про - граміст може використовувати нові можливості мікропроцесорів у своїх програмах, і які проблеми програмної несумісності можуть при цьому виникнути.
Перші персональні комп'ютери корпорації IBM, що з'явилися в 1981 р. і отримали назву IBM PC, використовували як центрального обчислювального вузла 16-розрядний мікропроцесор з 8-розрядною зовнішньою шиною Intel 8088. Надалі в персональних комп'ютерах став використовуватися і інший варіант мікропроцесора, 8086, котрий відрізнявся від 8088 тим, що був повністю 16-розрядним. З тих пір його ім'я стало прозивним, і в програмах, що використовують тільки можливості процесорів 8088 чи 8086, говорять, що вони працюють у режимі 86-го процесора.
У 1983 р. корпорацією Intel було запропоновано мікропроцесор 80286, в якому був реалізований принципово новий режим роботи, отримавший назву захищений. Однак процесор 80286 міг працювати і в режимі 86-го процесора, який стали називати реальним.
У подальшому на зміну процесору 80286 прийшли моделі 80386, i486 і, нарешті, різні варіанти процесора Pentium. Всі вони можуть робити і в реальному, і в захищеному режимах. Хоча кожна наступна модель була значно досконаліша попередньої (зокрема, майже на два порядки зросла швидкість роботи процесора, починаючи з моделі 80386 процесор став 32-розрядним, а в процесорах Pentium реалізований навіть 64-розрядний обмін даними з системною шиною), однак з точки зору програміста всі ці процесори досить схожі. Основним їх якістю є наявність двох режимів роботи - реального і захищеного. Строго кажучи, в сучасних процесорах реалізований ще і третій режим - віртуального 86-го процесора, або V86, однак у плані вико ¬ користування мови асемблера цей режим не відрізняється від звичайного режиму 86-го процесора.
Реальний і захищений режими насамперед принципово розрізняється способом звернення до оперативної пам'яті комп'ютера. Метод адресації пам'яті, що використовується в реальному режимі, дозволяє адресувати пам'ять лише в межах 1 Мбайт; в захищеному режимі використовується інший механізм (через що, зокрема, ці режими і виявилися повністю несумісними), що дозволяє звертатися до пам'яті обсягом до 4 Гбайт. Інша важлива відмінність захищеного режиму полягає в апаратній підтримці багатозадачності з апаратної ж (тобто реалізованою в самому мікропроцесорі) захистом завдань один від одного. Реальний і захищений режими мають пряме відношення до роботи операційної системи, встановленої на комп'ютері.
В даний час на персональних комп'ютерах типу IBM PC використовуються в основному два класи операційних систем (обидва - розробки корпорації Microsoft): однозадачна текстова система MS-DOS і багатозадачна графічна система Windows. Операційна система MS-DOS є системою реального режиму; іншими словами, вона використовує тільки засоби процесора 8086, навіть якщо вона встановлена на комп'ютері з процесором Pentium. Система Windows - це система захисту зпрощеного режиму; вона значно більш повно використовує можливості сучасних процесорів, зокрема, багатозадачність і розширене адресний простір. Зрозуміло, система Windows не могла б робити з процесором 8086, тому що в ньому не був реалізований захищений режим.
Відповідно двом типам операційних систем, і всі програмні забезпечення персональних комп'ютерів підрозділяється на два класи: програми, призначені для роботи під управлінням MS-DOS (їх часто називають додатками DOS) і програми, призначені для системи Windows (додатки Windows ). Природно, додатку. DOS можуть працювати тільки в реальному режимі, а додатки Windows - тільки в захищеному.
Таким чином, висловлювання «програмування в системі MS-DOS», «програмування в реальному режимі» і «програмування 86-го процесора» фактично є синонімами. При цьому слід почеркнути, що хоча процесор 8086, як мікросхема, вже давно не використовується, його архітектура і система команд цілком увійшли в сучасні процесори. Лише відносно невелике число команд сучасних процесорів спеціально призначені для організації захищеного режиму і розпізнаються процесором, тільки коли він працює в приміщенням режимі.
Метою виконання даної курсової роботи є отримання практичних навичок роботи програмування мовою асемблера. Підсумком виконання курсової роботи є розробка алгоритму контролю на парність масиву даних, що зберігається в деякій області пам'яті і програми на мові асемблера, який реалізує даний алгоритм.
1.Загальний розділ
Надійність програми досягається, в першу чергу, завдяки її правильному проектування, а не безкінечного тестування. Це правило означає, що якщо програма правильно розроблена у створеному як структура даних, так і структур управління, то це певною мірою гарантує правильність її функціонування. При застосуванні такого стилю програмування помилки є легко локалізації і переборні.
У більшості випадків рекомендується дотримуватися процесу розробки програми на асемблері:
1. Етапи постановки і формулювання завдання:
• вивчення предметної області та збір матеріалу в проблемно-орієнтир-ваному контексті;
• визначення призначення програми, вироблення вимог до неї і перед-уявлення вимог, якщо можливо, у формалізованому вигляді;
• формулювання вимог до подання вихідних даних і вихідних результатів;
• визначення структур вхідних і вихідних даних;
• формування обмежень і припущень на вихідні і вихідні данні.
2.Етапи проектування:
• формування «ассемблерной» моделі задачі;
• вибір методу реалізації завдання;
2. Етапи проектування:
• формування «ассемблерной» моделі задачі;
• вибір методу реалізації завдання;
• розробка алгоритму реалізації задачі;
• розробка структури програми відповідно до обраною моделлю пам'яті.
3. Етап кодування:
• уточнення структури вхідних та вихідних даних і визначення формату їх подання;
• програмування задачі;
• коментування тексту програми і складання попереднього опису програми.
4. Етап налагодження і тестування:
• складання тестів для перевірки правильності роботи програми;
• виявлення, локалізація й усунення помилок у програмі, виявлених у тестах;
• коректування коду програми та її опису.
5. Етап експлуатації та супроводу:
• настройка програми на конкретні умови використання;
• навчання користувачів роботі з програмою;
• організація збору відомостей про збої в роботі програми, помилки у вихідних даних, побажання щодо поліпшення інтерфейсу і зручності рабі ти з програмою;
• модифікація програми з метою усунення виявлених помилок і, при необхідності, зміни її функціональних можливостей.
До порядку застосування та повноті виконання перерахованих етапів потрібно підходити розумно. Багато що визначається особливостями конкретного завдання, її призначенням, об'ємом коду і оброблюваних даних, іншими характеристиками завдання. Деякі з цих етапів можуть або виконуватися одночасно з іншими етапами, або зовсім відсутніми.
Традиційно в існуючих реалізацій асемблера немає інтегрованого середовища, подібної інтегрованим середах Turbo Pascal, Turbo С або Visual C. Тому для виконання всіх функцій щодо введення коду програми, її трансляції, редагування та налагодження необхідно використовувати окремі службові програми. Велика частина їх входить до складу спеціалізованих пакетів асемблера.
На малюнку 1.1 наведена загальна схема процесу розробки програми на асемблері. На схемі виділено чотири кроки процесу. На першому кроці, коли вводиться код програми, можна використовувати будь-який текстовий редактор. Основною вимогою до нього є те, щоб він не вставляв сторонніх символів. Файл повинен мати розширення asm.
Рис. 1.1 - Процес розробки програми на асемблері.
Програми, що реалізують інші кроки схеми, входять до складу програмного пакету асемблера. Після написання тексту програми на асемблері настає наступний етап - трансляція програми. На цьому кроці формується об'єктний модуль, який включає в себе подання вихідної програми в машинних кодах і деяку іншу інформацію, необхідну для налагодження та компонування його з іншими модулями. Традиційно на ринку асемблерів для мікропроцесорів фірми Intel є два пакети:
«Макроассемблера» MASM фірми Microsoft і Turbo Assembler TASM фірми Borland.
У цих пакетах багато спільного. Пакет макроассемблера фірми Microsoft (MASM) отримав свою назву тому, що він дозволяв програмісту задувати макровизначеннями (або макроси), що представляють собою іменовані групи команд. Вони мали тим властивістю, що їх можна було вставляти в програму в будь-якому місці, вказавши тільки ім'я групи в місці вставки. Пакет Turbo Assembler (TASM) цікавий тим, що має два режими роботи. Один з цих режимів, званий MASM, підтримує всі основні возможності макроассемблера MASM. Інший режим, званий IDEAL, надає більш зручний синтаксис написання програм, більш ефективне використання пам'яті при трансляції програми та інші нововведення, що наближають компілятор асемблера до компіляторів мов високого рівня.