Але, як і все в цьому світі, Windows 9x не є досконалою операційною системою. Вона має свої недоліки. В свій час Windows 9x була досить гарною системою, але зараз вона взагалі не може розпізнавати обладнання, навіть інтегровану звукову карту. Існують такі випадки, коли операційна система виконує дії, які важко передбачити, запуск деяких програм може призвести до зависання комп’ютера. Дуже погано реалізований захист від несанкціонованого доступу.
3.4 Стислий опис Pascal 7.0
Першими мовами програмування високого рівня були Фортран, Кобол й Алгол, що з'явилися в 50-і роки ХХ століття. Алгол став родоначальником цілого сімейства мов, у числі яких і Паскаль.
Перша версія Алгола з'явилася в 1958 році. Одним з розроблювачів Алгола був "батько" ФОРТРАНу Джон Бекус. В 1967 році Вірт створив свою версію - АЛГОЛ W. Це було пов'язане з необхідністю знайти таку мову програмування, яку можна було б використати для навчання студентів методам розробки програм, таким як "програмування зверху вниз", "структурне програмування" і т.д.
В 1970 році у світі програмування відбулися принаймні дві великих події – з'явилися операційна система UNIX і нова мова програмування. Вирт назвав її на честь великого французького математика й релігійного філософа XVII століття Блеза Паскаля. Паскаль винайшов обчислювальний пристрій, саме тому новій мові було привласнено його ім'я. Перша версія мови була створена для комп'ютера CDC 6000. Завдяки своїй чіткості, логічності й іншим особливостям Паскаль надовго зайняв свою нішу, будучи прекрасною мовою для навчання програмуванню. Паскаль використався й для розробки серйозних програм-додатків. В 1975 році знову дві події стали віхами в історії програмування – Білл Гейтс і Пол Аллен заявили про себе, розробивши свою версію Бейсика, а Вірт і Йенсен випустили класичний опис мови "Pascal User Manual and Report".
Згодом з'явилися різні версії мови і її розширення. Найбільш відомим розширенням став пакет Турбо Паскаль фірми Borland, що з'явився в 1983 році й відразу став подією у світі комп'ютерних технологій. Перше згадування про нього містилося в рекламі, опублікованої в журналі BYTE, а сам пакет призначався для операційної системи СР/М. На початку 1984 року він був перенесений у середовище MS-DOS і придбав величезну популярність. З тих пор з'явилося кілька версій Турбо Паскаля, остання - сьома.
Мова Турбо Паскаль складається приблизно з 80 зарезервованих слів і спеціальних символів. Алфавіт мови становлять букви латинського алфавіту, цифри, а також спеціальні символи, такі, наприклад, як +, -, _. Спеціальними символами мови є й деякі пари символів. Як вже відзначалося, зарезервовані слова в мові Паскаль можуть застосовуватися тільки по своєму прямому призначенню, тобто як імена операторів, назв операцій і т.д.
Фірма Borland/Inprise завершила лінію продуктів Турбо Паскаль і перейшла до випуску системи візуальної розробки для Windows-Delphi. Незважаючи на це, Турбо Паскаль зберігає своє значення, це зв'язано як з його чіткою логічною структурою, так і з тими можливостями, які дозволяють використати Турбо Паскаль для рішення різноманітних завдань. Серед них обчислення й обробка даних, комп'ютерна графіка, робота зі звуком, системне програмування. Турбо Паскаль дозволяє застосовувати прийоми об’єктно-орієнтованого програмування, що стало однієї із провідних сучасних технологій програмування.
3.5 Стислий опис мови асемблера
Мова асемблера — це символічне подання машинної мови. Всі процеси в машині на найнижчому, апаратному рівні приводяться в дію тільки командами (інструкціями) машинної мови. Звідси зрозуміло, що, незважаючи на загальну назву, мову асемблера для кожного типу комп'ютера свій. Це стосується й зовнішнього вигляду програм, написаних на асемблері, і ідей, відбиттям яких ця мова є.
По-справжньому вирішити проблеми, пов'язані з апаратурами (або навіть, більше того, що залежать від апаратур як, приміром, підвищення швидкодії програми), неможливо без знання асемблера.
Програміст або будь-який інший користувач може використати будь-який засіб високого рівня, але насправді комп'ютер буде виконувати не команди мови, на якому написана його програма, а їхнє трансформоване подання у формі нудної й сумовитої послідовності команд зовсім іншої мови — машинного. А тепер представимо, що в такого користувача виникла нестандартна проблема або просто щось не заладилося. Приміром, його програма повинна працювати з деяким незвичайним пристроєм або виконувати інші дії, що вимагають знання принципів роботи апаратури комп'ютера. І от тут-те й починається зовсім інша історія.... Як би розумним не був програміст, яким би гарним не була мова, на якому він написав свою дивовижну програму, без знання асемблера йому не обійтися. І не випадково практично всі компілятори мов високого рівня містять засобу зв'язку своїх модулів з модулями на асемблері або підтримують вихід на ассемблерний рівень програмування.
Після створення процесора 8086 фірма Intel розробила більш досконалі процесори об’єднані під назвою I 80x86, така назва означає, що всі команди мікропроцесора, які виконуються на молодших моделях обов’язково виконуються на старше, отже все ПЗ, які розроблені для процесора 8086 успішно будуть працювати і на останніх моделях 80486 і Pentium. Ми будемо розглядати процесори з точки зору програміста. Не дивлячись на різноманітність моделей процесорів, найбільш важливим з точки зору біології програмування є 8086 як базова модель і 80386 , як перший процесор фірми Intel, який в повному об’ємі реалізував принцип багатозадачності.
Програмування на мові асемблера вважається складною задачею, причини цього такі:
Мова асемблера будь-якого процесора суттєво складніша будь-якої мови високого рівня. Щоб скористатись всіма можливостями мови асемблера, треба по крайній мірі знати команди мікропроцесора, а їх число з усіма можливими варіантами переважає 100, їх кількість значно перевищує кількість операторів і ключових слів інших мов високого рівня. Проблема ускладнюється ще тим, що зміни в асемблері виникають набагато швидше ніж в мовах високого рівня, це зв’язано з появою нових мікропроцесорів і відповідно нових команд.
Програміст, який використовує мови асемблера повинен сам слідкувати за розподілом пам’яті та вмістом регістрів, щоб коректно розподіляти і оперувати пам’яттю, в мовах високого рівня це робиться автоматично при допомозі компілятора, але ця обставина має перевагу: можна оптимально розташувати дані в пам’яті, забезпечити максимальну швидкість виконання та мінімальну довжину програми.
Програми на мові асемблера важче проектувати та підлагоджувати, треба весь час пам’ятати, що конкретно знаходиться в кожному регістрів в даній комірці пам’яті. Прийнято вважати, що розробка програми тільки на мові асемблера, деякого процесора, навіть якщо він поширений не рекомендується. Зрозуміло, що будь-яку програму можна написати тільки з допомогою асемблера, але для цього треба використати набагато більшу кількість команд і час який піде на її виконання і відладку буде набагато більший ніж для мови високого рівня. Набагато вигідніше писати програми на мові високого рівня, а найбільш критичні частини на швидкодії писати на мові асемблера. Наприклад на асемблері можна скласти процедури для реалізації вводу-виводу низького рівня, процедури обробки переривань та деякі інші.
Етапи створення програми.
Розробка програми на мові асемблера включає кілька етапів.
1) Підготовка початкового тексту програми;
2) Асемблювання програми(отримання об’єктного коду);
3) Компоновка програми(отримання виконуваного файлу);
4) Відладка програми(знаходження помилок).
Ці етапи циклічно повторюються.
Підготовка лістінгу програми.
Текст програми на мові асемблера записується в один або кілька файлів, імена файлів і їх розширення можуть бути будь-які, прийнято для файлів які містять програми мовою асемблера прийнято використовувати розширення *.asm. Для файлів визначених констант і повних типів розширення *.inc. Ці файли є текстовими їх можна набрати в будь-якому текстовому редакторі. Можна також використати інтегровані середовища для розробки програм, при програмуванні зручно виділяти один каталог для збереження всіх файлів програми і звідти запускати всі необхідні програми для підготовки, асемблювання та компонування програми. При використанні стандартних редакторів тексту, редаговані тексти треба зберігати у вигляді звичайних файлів у форматі ASCII, це означає, що ці файли треба зберігати без додаткових символів, ці символи часто вставляють в текст різні спеціалізовані редактори, наприклад WORD.
Підготовлений текст мови асемблер є початковим для спеціальних програм, які називаються асемблерами, далі програма асемблера. Задача програми асемблера перетворити текст програми у форму двійкових команд, останні можуть вже бути виконанні мікропроцесором. Після асемблювання дістають так звані файли об’єктних модулів, які мають відповідні розширення *.obj. Для отримання об’єктних файлів необхідного виконати відповідну програму асемблера masm фірми Microsoft, або tasm фірми Borland. В обох випадках після команди вказується ім’я файлу : masm prog1.asm, tasm prog1.asm.
Така форма команди є мінімальною, крім цієї форми можна використовувати іншу форму задаючи перед іменем файлу опції або ключі. Якщо програма складається з декількох файлів, то їх асемблювання проводиться незалежно один від одного, хоча отримані об’єктні файли представлені вже в двійковій формі запускати їх на виконання не можливо.
Компоновка програми. Текст програми може знаходитись в декількох файлах, змінні які описані в цих файлах можуть використовуватися спільно, якщо такі файли асемблюються окремо, то не можливо дістати повну інформацію, для того, щоб генерувати виконавчий код. Тому процес підготовки програми обов’язково включає в себе етап компоновки. На цьому етапі визначають всі невідомі, при окремому асемблювані, адреси всіх змінних або функцій, які використовуються спільно. Процес об’єднання об’єктних модулів в один файл виконується спец. програмою, яка називається компоновщиком. Це може бути програма link фірми Microsoft, або tlink фірми Borland, отримуваний виконуваний файл має розширення *.exe, або *.com. Компановщику треба передати імена відповідних об’єктних файлів. Після компонування отримується виконуваний файл, він отримує ім’я файла, який стоїть перший у відповідній команді.