Узгодження різномовних модулів
Програміст або будь-який інший користувач може використати будь-який засіб високого рівня, але насправді комп’ютер буде виконувати не команди мови, на якому написана його програма, а їхнє трансформоване подання у формі нудної й сумовитої послідовності команд зовсім іншої мови — машинного. А тепер представимо, що в такого користувача виникла нестандартна проблема або просто щось не заладилося… Читати ще >
Узгодження різномовних модулів (реферат, курсова, диплом, контрольна)
Міністерство освіти та науки України Харківський патентно-компютерний коледж КУРСОВИЙ ПРОЕКТ з системного програмування
" УЗГОДЖЕННЯ РІЗНОМОВНИХ МОДУЛІВ"
Харків 2006
ЗМІСТ ВСТУП
1. ПОСТАНОВКА ЗАВДАННЯ
2. ОПИС АЛГОРИТМУ
2.1 Текстовий опис алгоритму роботи програми
2.2 Алгоритм роботи програми на мові Assembler
2.3 Алгоритм роботи програми на мові Pascal 3
3. РЕАЛІЗАЦІЯ ПРОГРАМИ НА ЕОМ
3.1 ЕОМ Pentium 80 386
3.2 Стислий опис MS DOS
3.3 Стислий описWINDOWS
3.4 Стислий опис Pascal
3.5 Стислий опис Assembler
3.6 Стислий опис Debug
3.7 Опис процесу відлагодження програми ВИСНОВКИ ПЕРЕЛІК ПОСИЛАНЬ ДОДАТОК, А Текст програми на мові Pascal
ДОДАТОК Б Текст програми на мові Assembler
ДОДАТОК В Лістинг програми ДОДАТОК Г Результат роботи програми
ВСТУП У нашу епоху комп’ютер займає певне місце в житті людини. Хтось використає комп’ютер для ігор, хтось для навчання, деякі люблять посидіти в Internet. Але всі ці комп’ютери мають загальну структури й принципи функціонування, а відповідно, і історію розвитку. Еволюційний процес, що привів до сучасних комп’ютерів, був і продовжує залишатися надзвичайно швидким і динамічним.
У першій половині XIX в. англійський математик Чарльз Беббідж спробував побудувати універсальний обчислювальний пристрій, тобто комп’ютер (Беббідж називав його Аналітичною машиною). Саме Беббідж уперше додумався до того, що комп’ютер повинен містити пам’ять й управлятися за допомогою програми. Беббідж хотів побудувати свій комп’ютер як механічний пристрій, а програми збирався задавати за допомогою перфокарт — карт із щільного паперу з інформацією, яка наносилася за допомогою отворів (вони в той час уже широко вживалися в ткацьких верстатах). Однак довести до кінця цю роботу Беббідж не зміг — вона виявилася занадто складної для техніки того часу.
В 40-ходах XX в. відразу кілька груп дослідників повторили спробу Беббіджа на основі техніки XX в. — електромеханічних реле. Деякі із цих дослідників нічого не знали про роботи Беббіджа й перевідкрили його ідеї заново. Першим з них був німецький інженер Конрад Цузе, що в 1941 р. побудував невеликий комп’ютер на основі декількох електромеханічних реле. Але через війну роботи Цузе не були опубліковані. А в США в 1943 р. на одному з підприємств фірми IBM американець Говард Ейкен створив могутніший комп’ютер за назвою «Марко-1». Він уже дозволяв проводити обчислення в сотні разів швидше, ніж вручну (за допомогою арифмометра), і реально використався для військових розрахунків.
Однак електромеханічні реле працюють досить повільно й недостатньо надійно. Тому починаючи з 1943 р. у США група фахівців під керівництвом Джона Мочлі й Преспера Екерта початку конструювати комп’ютер ENIAC на основі на основі електронних ламп. Створений ними комп’ютер працював у тисячу разів швидше, ніж Марко-1. Однак виявилося, що більшу частину часу цей комп’ютер простоював — адже для завдання методу розрахунків (програми)у цьому комп’ютері доводилося протягом декількох годин або навіть декількох днів приєднувати потрібним образом проведення. А сам розрахунок після цього міг зайняти всього лише кілька хвилин або навіть секунд.
Щоб спростити й прискорити процес завдання програм, Мочлі й Екерт стали конструювати новий комп’ютер, що міг би зберігати програму у своїй пам’яті. В 1945 р. до роботи був притягнутий знаменитий математик Джон фон Нейман, що підготував доповідь про цей комп’ютер. Доповідь була розіслана багатьом ученим й одержала широку популярність, оскільки в ньому фон Нейман ясно й просто сформулював загальні принципи функціонування комп’ютерів, тобто універсальних обчислювальних пристроїв. І дотепер переважна більшість комп’ютерів зроблена відповідно до тих принципів, які виклав у своїй доповіді в 1945 р. Джон фон Нейман. Перший комп’ютер, у якому були втілені принципи фон Неймана, був побудований в 1949 р. англійським дослідником Морісом Уілксом.
В 40-х й 50-х роках комп’ютери створювалися на основі електронних ламп. Тому комп’ютери були дуже більшими (вони займали величезні зали), дорогі й ненадійними — адже електронні лампи, як і звичайні лампочки, часто перегоряють. Але в 1948 р. були винайдені транзистори — мініатюрні й недорогі електронні прилади, які змогли замінити електронні лампи. Це привело до зменшення розмірів комп’ютерів у сотні разів і підвищенню їхньої надійності. Перші комп’ютери на основі транзисторів з’явилися наприкінці 50-х років, а до середини 60-х років був створений і значно більше компактні зовнішні пристрої для комп’ютерів, що дозволило фірмі Digital Equipment випустити в 1965 р. перший міні-комп'ютер PDP-8 розміром з холодильник і вартістю всього 20 тис. діл. (комп'ютери 40-х й 50-х років звичайно коштували мільйони діл.).
Після появи транзисторів найбільш трудомісткою операцією при виробництві комп’ютерів було з'єднання й спайка транзисторів для створення електронних схем. Але в 1959 р. Роберт Нойс (майбутній засновник фірми Intel) винайшов спосіб, що дозволяє створювати на одній пластині кремнію транзистори й всі необхідні з'єднання між ними. Отримані електронні схеми стали називатися інтегральними схемами, або чипами. В 1968 р. фірма Burroughs випустила перший комп’ютер на інтегральних схемах, а в 1970 р. фірма Intel початку продавати інтегральні схеми пам’яті. Надалі кількість транзисторів, що вдавалося розмістити на одиницю площі інтегральної схеми, збільшувалося приблизно вдвічі щороку, що й забезпечує постійне зменшення вартості комп’ютерів і підвищення швидкодії.
1. ПОСТАНОВА ЗАВДАННЯ Написати на базовій алгоритмічній мові програму.
1. Написати модуль обчислення умовного арифметичного виразу на мові асемблера.
2. Вбудувати вивід цього модулю у програму на базовій алгоритмічній мові.
3. Виконати тестові перевірки. Відмітити нормальні та аномальні результати. Зробити аналіз результатів.
4. У курсовому проекті представити лістинг, алгоритм та текст програми.
Для партії ІП скласти відомість теплової постійної часу нагрівання. Результати оформити у вигляді документа:
Наименование ИП | Масса ИП, кг | Удельная теплоемкость мтериала ИП | Поверхность | Т* | |
K | M | C | S | T=(M*C)/(S*E) | |
Сумма | |||||
Вихідні дані оформити у виді записів. Довжину реквізитів та їх значення вибрати самостійно.
* Цей стовбець реалізувати на мові вищого рівня асемблері.
2. ОПИС АЛГОРИТМУ РІШЕННЯ ЗАДАЧІ
2.1 Текстовий опис алгоритму роботи програми Так як метою цього курсового проекту є написання модулів на двох різних мовах програмування, то і алгоритмів рішення задачі повинно бути два. Най головнішим модулем є модель написаний на мові Pascal, тому що саме він бере на себе усі головні функції програми, а саме організовую зв’язок користувача із програмою, перевіряє коректність вводу та передає поточні данні до модулю Assembler з послідуючою візуалізацією результатів роботи двох модулів.
Програма повинна починатися з модуля Pascal, який пропонує користувачу ввести потрібні данні.
2.2 Алгоритм роботи програми на мові Асемблер
2.3 Алгоритм роботи програми на мові Паскаль
Алгоритм роботи процедури Create
Алгоритм роботи процедури Add
Алгоритм роботи процедури View
Алгоритм роботи процедури Delete
Алгоритм роботи процедури Edit
Алгоритм роботи процедури Vvod
3. РЕАЛІЗАЦІЯ ПРОГРАМИ НА ЕОМ
3.1 ЕОМ Pentium 80 386
Перший універсальний мікропроцесор фірми Intel з’явився в 1970 р. Він називався Intel 4004, був чотирьохрозрядний мав можливість вводу/виводу й обробки чотирибітних слів. Швидкодія його становило 8000 операцій у секунду. Мікропроцесор Intel 4004 був розрахований на застосування в програмувальних калькуляторах з пам’яттю розміром в 4 Кбайт.
Через три роки фірма Intel випустила процесор 8080, що міг виконувати вже 16-бітні арифметичні операції, мав 16-розрядну адресну шину й, отже, міг адресувати до 64 Кбайт пам’яті. 1978 рік ознаменувався випуском процесора 8086 з розміром слова в 16 біт (два байти), 20-розрядною шиною й міг оперувати вже з 1 Мбайт пам’яті (2я520я0=1 048 576, або 1024 Кбайт), розділеної на блоки (сегменти) по 64 Кбайт кожний. Процесором 8086 комплектувалися комп’ютери, сумісні з IBM PC й IBM PC/XT. Наступним великим кроком у розробці нових мікропроцесорів став процесор, що з’явився в 1982 році, 8028б. Він мав 24-розрядну адресну шину, міг розпоряджатися 16 мегабайтами адресного простору й ставився на комп’ютери, сумісні з IBM PC/AT. У жовтні 1985 року був випущений 80386DX з 32- розрядною шиною адреси (максимальний адресний простір — 4 Гбайт), а в червні 1988 року 80386SX, більш дешевий у порівнянні з 80386DX та мав 24-розрядну адресну шину. Потім у квітні 1989 року з’являється мікропроцесор 80486DX, а в травні 1993 — перший варіант процесора Pentium (обидва з 32-розрядною шиною адреси).
Мікропроцесор 80 386 має два режими роботи: режим реальних адресів, названий реальним режимом, і захищений режим. При подачі сигналу скидання або при включенні живлення встановлюється реальний режим, причому 80 386 працює як дуже швидкий 8086, але, за бажанням програміста, з 32-розрядним розширенням. У реальному режимі МП 80 386 має таку ж базову архітектуру, що й МП 8086, але забезпечує доступ до 32-розрядних регістрів. Механізм адресації, розміри пам’яті й обробка переривань МП 8086 повністю збігаються з аналогічними функціями МП 80 386 у реальному режимі. Єдиним способом виходу з реального режиму є явне перемикання в захищений режим. У захищений режим мікропроцесор 80 386 входить при установці біта включення захисту (РЕ) у нульовому регістрі керування (CR) за допомогою команди пересилання (MOV to CR). Для сумісності із МП 80 286 з метою установки біта РЕ може бути також використана команда завантаження слова стану машини LMSW. Процесор повторно входить у реальний режим у тому випадку, якщо програма командою пересилання скидає біт РЕ регістра CR.
Повні можливості МП 80 386 розкриваються в захищеному режимі. Програми можуть виконувати перемикання між процесами з метою входу в завдання, призначені для режиму віртуального МП 8086. Кожне таке завдання проявляє себе в семантиці МП 8086 (тобто у відносинах між символами й приписуваними їм значеннями незалежно від інтерпретуючого їхнього встаткування). Це дозволяє виконувати на МП 80 386 програмне забезпечення для мікропроцесора 8086 — прикладну програму або цілу операційну систему. У той же час завдання для віртуального МП 8086 ізольовані й захищені як друг від друга, так і від головної операційної системи МП 80 386
3.2 Стислий опис MS DOS
Першою розробкою MS-DOS можна вважати операційну систему для персональних ЕОМ, створену фірмою Seattle Computer Products в 1980 р. Наприкінці 1980 р. система, спочатку названа QDOS, була модифікована й перейменована в 86-DOS.Право на використання операційної системи 86-DOS було куплено Корпорацією MICROSOFT, що уклала контракт із фірмою IBM, зобов’язуючись розробити операційну систему для нової моделі персональних комп’ютерів, що випускають фірмою. Коли наприкінці 1981 р. новий комп’ютер IBM PC придбав широку популярність, його операційна система являла собою модифіковану версію системи 86-DOS, названу PC-DOS, версія 1.0.
MS-DOS сама по собі складається з безлічі програм, які перебувають на диску комп’ютера у вигляді файлів. Вони розміщаються частково в кореневому каталозі диска З, частково в окремому каталозі, якому звичайно привласнюють ім'я DOS.
Завдання операційної системи полягає в тім, щоб, з одного боку, забезпечити взаємодія оператора з комп’ютером, надавши йому можливість запускати потрібні програми й працювати з файловою системою, з іншого боку, забезпечити взаємодія програм операційної системи й прикладних програм з базовою системою уведення/виводу (Basic Input Output System), розташованої в ПЗУ.
При цьому операційна система як би ізолює прикладні програми від безпосередньої взаємодії з апаратурами комп’ютера. Це добре, тому що апаратури комп’ютерів, що випускають різними фірмами, як правило, різна й без такої ізоляції було б важко забезпечити працездатність програм на всіх моделях персональних комп’ютерів.
ОС MS-DOS взаємодіє з оператором за допомогою монітора й клавіатури. Всі повідомлення, призначені для оператора, операційна система виводить у вигляді тексту на екран монітора, причому при заповненні екрана всі рядки зрушуються нагору, сама верхня пропадає, а в нижній частині екрана з’являється місце для виводу, що випливає повідомлення. Оператор може відповідати на повідомлення або вводити команди для операційної системи у вигляді коротких англійських слів або скорочень, таких, як сміттю, dir, delete і т.д.
Для запуску програми оператор повинен повідомити ОС ім'я файлу, що містить програму, або повний шлях до цього файлу із вказівкою диска й каталогу.
Операційна система MS-DOS складається з наступних частин.
Базова система вводу-виводу (BIOS), що перебуває в постійній пам’яті (постійному запам’ятовувальному пристрої, ПЗУ) комп’ютера. Ця частина операційної системи є «убудованої» у комп’ютер. Її призначення складається у виконанні найбільш простих й універсальних послуг операційної системи, пов’язаних зі здійсненням уведеннявиводу.
BIOS містить також тест функціонування комп’ютера, що перевіряє роботу пам’яті й пристроїв комп’ютера при включенні його електроживлення.
Крім того, базова система вводу-виводу містить програму виклику завантажника операційної системи.
Завантажник операційної системи (ядро DOS) — це дуже коротка програма, що перебуває в першому секторі кожної дискети з операційною системою DOS. Функція цієї програми полягає в зчитуванні на згадку ще двох модулів операційної системи, які й завершують процес завантаження DOS.
На жорсткому диску (вінчестері) завантажник операційної системи складається із двох частин. Це пов’язане з тим, що жорсткий диск може бути розбитий на кілька розділів (логічних дисків). Перша частина завантажника перебуває в першому секторі жорсткого диска, вона вибирає, з якого з розділів жорсткого диска варто продовжити завантаження. Друга частина завантажника перебуває в першому секторі цього розділу, вона зчитує на згадку модулі DOS і передає їм керування.
Дискові файли IO. SYS і МSDOS SYS (вони можуть називатися й по-іншому, наприклад IBMBIO COM й IВМDOS .СОМ для РС DО, DRBIOS SIS й DRDOS SYS для DR DOS, — назви міняються залежно від версії операційної системи). Вони завантажуються на згадку завантажником операційної системи й залишаються в пам’яті комп’ютера постійно. Файл IO. SYS являє собою доповнення до базової системи вводу-виводу в ПЗУ. Файл MSDOS. SYS реалізує основні послуги високого рівня DOS.
Командний процесор DOS обробляє команди, що вводять користувачем. Командний процесор перебуває в дисковому файлі COMMAND.COM на диску, з якого завантажується операційна система. Деякі команди користувача, наприклад TYRE, DIR або COPY, командний процесор виконує сам. Такі команди називаються внутрішніми. Для виконання інших (зовнішніх) команд користувача командний процесор шукає на дисках програму з відповідним ім'ям й якщо знаходить неї, то завантажує на згадку й передає їй керування. По закінченні роботи програми командний процесор видаляє програму з пам’яті й виводить повідомлення про готовність до виконанні команд (запрошення DOS).
Зовнішні команди DOS — це програми, що поставляють разом з операційною системою у вигляді окремих файлів. Ці програми виконують дії обслуговуючого характеру, наприклад форматування дискет, перевірку дисків і т.д.
Драйвери пристроїв — це спеціальні програми, які доповнюють систему вводу-виводу DOS і забезпечують обслуговування нових або нестандартне використання наявних пристроїв. Наприклад, за допомогою драйверів можлива робота з «електронним диском», тобто частиною пам’яті комп’ютера, з якої можна працювати так само, як з диском. Драйвери завантажуються на згадку комп’ютера при завантаженні операційної системи, їхні імена вказують у спеціальному файлі CONFIG.SYS. Така схема полегшує додавання нових пристроїв і дозволяє робити це, не торкаючись системних файлів DOS.
3.3 Стислий опис операційної системи Windows 9x
Операційна система — це програма, що здійснює діалог з користуваем, керує комп’ютером, розподіляє ресурси між прикладними процесами, запускає інші програми. Операційна система завантажується при включенні комп’ютера.
Windows 9x — багатозадачна операційна система (дозволяє працювати з декількома програмами одночасно). Windows 9x створена для персональних комп’ютерів типу IBM PC. Windows 9x має дружній, інтуїтивний інтерфейс, який сприяє ії швидкому опануванню.
В цій операційній системі реалізований як однодокументний (SDIінтерфейс), так і багатодокументний (MDI — інтерфейс). SDI — означає, що в середині одного вікна може бути відкритий лише один документ. MDIозначає, що один додаток, наприклад текстовий редактор, може відкрити в середині свого вікна декілька вікон, кожне з яких містить свою інформацію. Вікно додатка називається батьківським, а відкриті в середині ньогодочірні. Дочірні можуть обмінюватись інформацією, як між собою, так і з батьківським. Windows 9x — це об'єктно-орієнтоване середовище. Всі елементи інтерфейса — це об'єкти, кожні із своїми властивостями, і способами поведінки. Для кожного об'єкта існує своє контексне меню. Воно використовується для визначення чи зміни властивостей об'єкта, виконання над ним визначених дій. Кожен об'єкт вміє розпізнавати повідомлення, які йому надсилаються та реагувати на них. Всі дії, які виконуються в операційній системі Windows 9x — обмін повідомленнями між об'єктами.
Крім перелічених можливостей до переваг додаються:
1. вбудовані мережеві можливості, простий та зручний засіб роботи в Internet;
2. використання технології Plug&Play, що означає «включити і робити». Ця технологія забезпечує самонастроювання апаратних засобів, новий рівень взаємодії програмного забезпечення з пристроями апаратної частини;
3. широку підримку засобів мультимедіа, висока якість звуку та зображення;
4. можливість користування користувачам з відхиленням в стані здоров’я. Також в цій операційній системі додатки можуть обмінюватись між собою інформацією;
5. буфер обміну — це ділянка оперативної пам’яті, призначена для тимчасового розміщення даних обміну. Один додаток розміщує інформарцію в буфер обміну, інші вилучають її з метою подальшого використання;
6. технології OLE та DDE.
DDE — дозволяє одній програмі використовувати дані, створені в іншій програмі. OLE — вдосконалення засобів DDE.
Також Windows 9x дозволяє обновити диски до 32-розрядної FAT, які раніше були відформатовані в системі FAT16. Ця операційна система включає більш досконалу підситему керування електроживленням, працює з кількома дисплеями, більш ефективно працює з пам’яттю, а також підтримує нові типи устаткування і безліч нових пристроїв. Як би там не було, це зручна, красива і сучасна операційна система.
Але, як і все в цьому світі, 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 80×86, така назва означає, що всі команди мікропроцесора, які виконуються на молодших моделях обов’язково виконуються на старше, отже все ПЗ, які розроблені для процесора 8086 успішно будуть працювати і на останніх моделях 80 486 і Pentium. Ми будемо розглядати процесори з точки зору програміста. Не дивлячись на різноманітність моделей процесорів, найбільш важливим з точки зору біології програмування є 8086 як базова модель і 80 386, як перший процесор фірми Intel, який в повному об'ємі реалізував принцип багатозадачності.
Програмування на мові асемблера вважається складною задачею, причини цього такі:
Мова асемблера будь-якого процесора суттєво складніша будь-якої мови високого рівня. Щоб скористатись всіма можливостями мови асемблера, треба по крайній мірі знати команди мікропроцесора, а їх число з усіма можливими варіантами переважає 100, їх кількість значно перевищує кількість операторів і ключових слів інших мов високого рівня. Проблема ускладнюється ще тим, що зміни в асемблері виникають набагато швидше ніж в мовах високого рівня, це зв’язано з появою нових мікропроцесорів і відповідно нових команд.
Програміст, який використовує мови асемблера повинен сам слідкувати за розподілом пам’яті та вмістом регістрів, щоб коректно розподіляти і оперувати пам’яттю, в мовах високого рівня це робиться автоматично при допомозі компілятора, але ця обставина має перевагу: можна оптимально розташувати дані в пам’яті, забезпечити максимальну швидкість виконання та мінімальну довжину програми.
Програми на мові асемблера важче проектувати та підлагоджувати, треба весь час пам’ятати, що конкретно знаходиться в кожному регістрів в даній комірці пам’яті. Прийнято вважати, що розробка програми тільки на мові асемблера, деякого процесора, навіть якщо він поширений не рекомендується. Зрозуміло, що будь-яку програму можна написати тільки з допомогою асемблера, але для цього треба використати набагато більшу кількість команд і час який піде на її виконання і відладку буде набагато більший ніж для мови високого рівня. Набагато вигідніше писати програми на мові високого рівня, а найбільш критичні частини на швидкодії писати на мові асемблера. Наприклад на асемблері можна скласти процедури для реалізації вводу-виводу низького рівня, процедури обробки переривань та деякі інші.
Етапи створення програми.
Розробка програми на мові асемблера включає кілька етапів.
Підготовка початкового тексту програми;
Асемблювання програми (отримання об'єктного коду);
Компоновка програми (отримання виконуваного файлу);
Відладка програми (знаходження помилок).
Ці етапи циклічно повторюються.
Підготовка лістінгу програми.
Текст програми на мові асемблера записується в один або кілька файлів, імена файлів і їх розширення можуть бути будь-які, прийнято для файлів які містять програми мовою асемблера прийнято використовувати розширення *.asm. Для файлів визначених констант і повних типів розширення *.inc. Ці файли є текстовими їх можна набрати в будь-якому текстовому редакторі. Можна також використати інтегровані середовища для розробки програм, при програмуванні зручно виділяти один каталог для збереження всіх файлів програми і звідти запускати всі необхідні програми для підготовки, асемблювання та компонування програми. При використанні стандартних редакторів тексту, редаговані тексти треба зберігати у вигляді звичайних файлів у форматі ASCII, це означає, що ці файли треба зберігати без додаткових символів, ці символи часто вставляють в текст різні спеціалізовані редактори, наприклад WORD.
Підготовлений текст мови асемблер є початковим для спеціальних програм, які називаються асемблерами, далі програма асемблера. Задача програми асемблера перетворити текст програми у форму двійкових команд, останні можуть вже бути виконанні мікропроцесором. Після асемблювання дістають так звані файли об'єктних модулів, які мають відповідні розширення *.obj. Для отримання об'єктних файлів необхідного виконати відповідну програму асемблера masm фірми Microsoft, або tasm фірми Borland. В обох випадках після команди вказується ім'я файлу: masm prog1. asm, tasm prog1.asm.
Така форма команди є мінімальною, крім цієї форми можна використовувати іншу форму задаючи перед іменем файлу опції або ключі. Якщо програма складається з декількох файлів, то їх асемблювання проводиться незалежно один від одного, хоча отримані об'єктні файли представлені вже в двійковій формі запускати їх на виконання не можливо.
Компоновка програми. Текст програми може знаходитись в декількох файлах, змінні які описані в цих файлах можуть використовуватися спільно, якщо такі файли асемблюються окремо, то не можливо дістати повну інформацію, для того, щоб генерувати виконавчий код. Тому процес підготовки програми обов’язково включає в себе етап компоновки. На цьому етапі визначають всі невідомі, при окремому асемблювані, адреси всіх змінних або функцій, які використовуються спільно. Процес об'єднання об'єктних модулів в один файл виконується спец. програмою, яка називається компоновщиком. Це може бути програма link фірми Microsoft, або tlink фірми Borland, отримуваний виконуваний файл має розширення *.exe, або *.com. Компановщику треба передати імена відповідних об'єктних файлів. Після компонування отримується виконуваний файл, він отримує ім'я файла, який стоїть перший у відповідній команді.
3.6 Стислий опис відладчика Debug
У цій першій вправі для перегляду вмісту комірок пам’яті використовується програма DOS DEBUG. Для запуску цієї програми введіть DEBUG і натисніть Enter, у результаті програма DEBUG повинна завантажиться з диска в пам’ять. Після закінчення завантаження на екрані з’явиться запрошення у вигляді дефіса, що свідчить про готовність програми DEBUG для прийому команд.
Розглянемо використання відладчика DEBUG для безпосереднього введення програм в пам’ять й трасування їхнього виконання.
Машинні команди мають різну довжину: один, два або три байти. Машинні команди перебувають у пам’яті безпосередньо один за одним. Виконання програми починається з першої команди й далі послідовно виконуються інші.
Можна ввести програму безпосередньо в пам’ять машини й виконати її покомандно. У той же час можна переглядати вміст регістрів після виконання кожної команди. Після завантаження DEBUG на екрані з’явиться запрошення до введення команд у вигляді дефіса.
Для безпосереднього введення програми машинною мовою введіть наступну команду, включаючи пробіли:
E CS:100 B8 23 01 05 25 00 (натисніть Enter)
Команда E позначає Enter (введення). CS:100 визначає адреси пам’яті, куди будуть вводитися команди, — тичина.100 (256) байт від початку сегмента кодів. (Звичайна стартова адреса для машинних кодів в відладчику DEBUG).
Команда E записує кожну пару шістнадцяткових цифр в пам’ять у вигляді байта, починаючи з адреси CS:100 до адреси CS:105.
Наступна команда Enter:
E CS:106 8B D8 03 D8 8B CB (Enter)
вводить шість байтів в осередки, починаючи з адреси CS:106 і далі в 107, 108, 109, 10A й 10B. Остання команда Enter:
E CS:10C 2B C8 2B C0 90 CB (Enter)
уводить шість байтів, починаючи з CS:10C в 10D, 10E, 10 °F, 110 й 111.
Перевірте правильність введення значень. У випадку, якщо є помилки, то варто повторити команди, які були введені неправильно.
Тепер залишилося найпростіше — виконати ці команди.
Введіть команду R для перегляду вмісту регістрів і прапорів. У цей момент відладчик покаже вміст регістрів у шічтнадцятковому форматі, наприклад, AX=0000, BX=0000,…
Вміст регістра IP (покажчик команд) виводиться у вигляді IP=0100, показуючи що виконувана команда перебуває на зсуві 100 байт від початку сегмента кодів. Регістр прапорів показує наступні значення прапорів:
NV UP DI PL NZ NA PO NC
Дані значення відповідають:
1. NV — немає переповнення
2. UP — правий напрямок
3. DI — переривання заборонені
4. PL — знак плюс
5. NZ — не нуль
6. NA — немає зовнішнього переносу
7. PO — контроль на чесність
8. NC — немає переносу.
Команда R показує також по зсуві 0100 першу виконувану машинну команду.
MOV AX, 0123 — асемблерний мнемонічний код, що відповідає введеній машинній команді. Це є результат операції дизасемблювання, що забезпечує відладчик для більш простого розуміння машинних команд. Розглянута в цьому випадку команда позначає пересилання безпосереднього значення в регістр AX.
У цей момент команда MOV ще не виконана. Для її виконання натисніть клавішу T (для трасування) і клавішу Enter. У результаті команда MOV буде виконана й відладчик видасть на екран вміст регістрів, прапори, а також наступну на черзі команду. Помітимо, що регістр AX тепер містить 0123. Машинна команда пересилання в регістр AX має код B8 і за цим кодом треба безпосередні дані 2301. У ході виконання команда B8 пересилає значення 23 у молодшу частину регістра AX, тобто, однобайтовый регістр AL, а значення 01 — у старшу частину регістра AX, тобто, у регістр AH:
AX: | 01 | 23 |
Вміст регістра IP:0103 показує адреси наступної виконуваної команди в сегменті кодів:
13C6:0103 52 500 ADD AX, 0025
Для виконання даної команди знову введіть T. Команда додасть 25 до молодшої (AL) частини регістра AX й 00 до старшої (AH) частини регістра AX, тобто, додасть 0025 до регістра AX. Тепер регістр AX містить 0148, а регістр IP 0106 — адресу наступної команди для виконання.
Введіть знову команду T. Наступна машинна команда пересилає вміст регістра AX у регістр BX і після її виконання в регістрі BX буде втримуватися значення 0148. Регістр AX зберігає колишнє значення 0148, оскільки команда MOV тільки копіює дані з одного місця в інше. Тепер введіть команду T для покрокового виконання кожної команди, що залишилася в програмі. Наступна команда додасть вміст регістра AX до вмісту регістра BX, в останньому одержимо 0290. Потім програма скопіює вміст pегистра BX в CX, відніме AX з CX, і відніме AX з нього самого. Після цієї останньої команди, прапор нуля змінить свій стан c NZ (не нуль) на ZR (нуль), тому що результатом цієї команди є нуль (вирахування AX із самого себе очищає цей регістр в 0).
Можна ввести T для виконання останніх команд NOP й RET, але це ми зробимо пізніше. Для перегляду програми в машинних кодах у сегменті кодів уведіть D для дампа:
D CS:100
У результаті відладчик видасть на кожен рядок екрана по 16 байт даних у шістнадцятковому поданні (32 шіст. цифри) і в символьному поданні в коді ASCII (один символ на кожну пару шіст. цифр). Подання машинного коду в символах ASCII не має змісту й може бути ігноровано.
Перший рядок дампа починається з 00 і представляє вміст осередків від CS:100 до CS:10 °F. Другий рядок представляє вміст осередків від CS:110 до CS:11 °F. Незважаючи на те, що ваша програма закінчується за адресою CS:111, команда Dump автоматично видасть на восьми рядках екрана дамп із адреси CS:100 до адреси CS:170.
При необхідності повторити виконання цих команд скиньте вміст регістра IP і повторіть трасування знову. Введіть R IP, введіть 100, а потім необхідне число команд T. Після кожної команди натискайте клавішу Enter.
Для завершення роботи із програмою DEBUG введіть Q (Quit — вихід). У результаті відбудеться повернення в DOS і на екрані з’явиться запрошення A> або C>. У випадку, якщо друкувався протокол роботи з відладчиком, то для припинення знову натисніть Ctrl/PrtSc.
Спеціальні засоби відладчика
В операційній системі DOS можна використати DEBUG для введення команд Асемблера так само, як і команд машинної мови. На практиці можна користуватися обома методами.
Команда A
Команда відладчика A (Assemble) переводить DEBUG у режим прийому команд Асемблера й перекладу їх у машинні коди.
Команда U
Команда відладчика U (Unassemble) показує машинні коди для команд Асемблера. Необхідно повідомити відладчику адреси першої й останньої команди, які необхідно переглянути Введення програми звичайно використовується мовою Асемблера, коли машинний код невідомий, а введення в машинному коді - для зміни програми під час виконання. Однак у дійсності програма DEBUG призначена для налагодження програм.
Збереження програми з відладчика
Можна використати DEBUG для збереження програм на диску в наступних випадках:
1. Після завантаження програми в пам’ять машини і її модифікації необхідно зберегти змінений варіант. Для цього треба:
а. завантажити програму по її імені: DEBUG n:ім'я файлу [Enter]
б. переглянути програму за допомогою команди D й увести зміни по команді E
в. записати змінену програму: W [Enter]
2. Необхідно за допомогою DEBUG написати невелику по обсягу програму й зберегти її на диску. Для цього треба:
а. викликати відладчик DEBUG
б. за допомогою команд A (assemble) і E (enter) написати програму в. привласнити програмі ім'я: N ім'я файлу.COM [Enter].
Тип програми повинен бути COM — тому що тільки програміст знає, де дійсно кінчається його програма, указати відладчику довжину програми в байтах.
1. запросити регістр CX командою: R CX [Enter] - відладчик видасть на цей запит CX 0000 (нульове значення)
2. указати довжину програми — 6
3. записати змінену програму: W [Enter]
В обох випадках DEBUG видає повідомлення «Writing nnnn bytes» (Запис nnnn байтів). У випадку, якщо nnnn дорівнює 0, то відбулася помилка при уведенні довжини програми, і необхідно повторити запис знову.
Відладчик DOS DEBUG цей засіб, корисний для налагодження асемблерних програм. Однак варто бути обережним з її використанням, особливо для команди E (уведення). Уведення даних у неправильні адреси пам’яті або уведення некоректних даних можуть привести до непередбачених результатів.
На екрані в цьому випадку можуть з’явитися «дивні» символи, клавіатура заблокована або навіть DOS перерве DEBUG і перезавантажить себе з диска. Які-небудь серйозні ушкодження навряд чи відбудуться, але можливі деякі несподіванки, а також втрата даних, які вводилися при роботі з відладчиком.
У випадку, якщо дані, уведені в сегмент даних або сегмент кодів, виявилися некоректними, треба, знову використовуючи команду E, виправити їх. Однак, можна не помітити помилки й почати трасування програми. Але й тут можливо ще використати команду E для змін. У випадку, якщо необхідно почати виконання з першої команди, то варто встановити в регістрі командного покажчика (IP) значення 0100.
Введіть команду R (register) і необхідний регістр у наступному виді:
R IP [Enter]
Відладчика видасть на екран вміст регістра IP і перейде в очікування введення. Тут варто ввести значення 0100 і нажати для перевірки результату команду R (без IP). Відладчик видасть уміст регістрів, прапорів і першу виконувану команду. Тепер можна, використовуючи команду T, знову виконати трасування програми.
У випадку, якщо ваша програма виконує які-небудь підрахунки, то можливо буде потрібно очищення деяких областей пам’яті й регістрів. Але впевніться у збереженні вмісту регістрів CS, DS, SP й SS, які мають специфічне призначення
ВИСНОВКИ При виконанні курсового проекту я навчився розробляти й узгоджувати між собою різномовні модулі, а також закріпив свої вміння з програмування мовами Turbo Pascal та Асемблера. В курсовому проекті написання модулів проводилося на мові Turbo Pascal та мові Асемблера. Введення даних та перевірка відповідності їх діапазону реалізувалася мовою Turbo Pascal, а процедура обчислення виразу — мовою Асемблера. Для розробки модулів програми я використовував середовище Turbo Pascal 7.0 фірми Borland. Асемблер є убудованим у середовище Turbo Pascal 7.0. Розробка різномовних модулів буде здійснюватися на ПК, що працює під керівництвом ОС Windows XP SP2.
ПЕРЕЛІК ПОСИЛАНЬ
1. Гук М. Аппаратные средства IBM PC Санкт-Питербург, 1997.
2. Жигарев А. Н. Основы компьютерной грамоты. Ленинград Машиностроение, 1987.
3. С. Мюллер. Модернизация и ремонт ПК. 2003.
4. Гук. М. Процессоры Intel от 8086 до Pentium. Санкт-Питербург Питер Паблишинг, 1997.
5. Фигурнов В. Э. IBM PC для пользователя. Москва Инфа-М, 1997.
6. Немнюгін С.А. Turbo Pascal Практикум. Санкт-Петербург Питер 2002.
7. Сердюченко В. Я. Розробка алгоритмів та програмування мовою Turbo Pascal, Харків 1995.
Юров В. И. Справочная система по язику ассемблера IBM PC. СанктПетербург Питер 1998.
ДОДАТОК А
Текст програми на мові Pascal
program kyrsach_by_oe;
{$l abc}{abc.obj}
uses crt;
type
vedomost=record
naimenovanie:string[12];
massa:Real;
teploemkost:Real;
poverxnost:Real;
T, e: Real;
num:byte;
end;
const
norm=$ 17;
sel=GREEN;
n=6;
var
menu:array[1.n] of string[40];
punkt:integer;
ch:char;
x, y: integer;
a:vedomost;
Fname:string;
PM:byte;
krec:byte;
f:file of vedomost;
S4,summa4_T:real;
t:real;
mass:array[1.20] of vedomost;
procedure abv; external;
procedure vvod (var a: vedomost);
begin
clrscr;
writeln ('Vvedite naimenovanie IP: ');
readln (A.Naimenovanie);
writeln ('Vvedite massy: ');
readln (A.Massa);
writeln ('Vvedite ydelnyy teploemkost: ');
readln (a.teploemkost);
writeln ('Vvedite poverxnost ');
readln (a.poverxnost);
writeln ('Vvedite …: ');
readln (a.e);
writeln ('Press Enter…');
readln;
end;
procedure read_f;
var
i:byte; {nomer ykazatelya}
begin
writeln ('Vvedite ima fajla');
readln (fname);
krec:=0; {kolitchestvo elementov mass poka 0}
assign (f, fname);
reset (f);
for i:=0 to filesize (f)-1 do
begin
krec:=krec+1; {yvelichim stchotchik na 1}
read (f, mass[krec]); {zapishem inf o stydente f element massiva}
end;
close (f);
end;
procedure CreateFile;
var
F:file of vedomost;
A:vedomost;
begin
clrscr;
write ('Vvedite ima fajla:'); Readln (Fname);
Assign (F, Fname);
Rewrite (f);
vvod (a);
write (f, a);
close (f);
writeln ('Fajl ', Fname,' yspewno sozdan !!!');
writeln ('Press Enter…');
Readln;
end;
procedure myframe;
var l, t: integer;
i:integer;
c1,c11,c2,c3,c4,c5,c6,c7,c8,c9,c10:char;
begin
clrscr;
c1:=chr (201);
c2:=chr (205);
c3:=chr (187);
c4:=chr (186);
c5:=chr (200);
c6:=chr (188);
c7:=chr (203);
c8:=chr (202);
c9:=chr (204);
c10:=chr (185);
c11:=chr (206);
gotoxy (l, t);
write (c1);
for i:=2 to 15 do write (c2);
write (c7);
for i:=17 to 29 do write (c2);
write (c7);
for i:=31 to 46 do write (c2);
write (c7);
for i:=48 to 60 do write (c2);
write (c7);
for i:=62 to 72 do write (c2);
writeln (c3);
writeln (c4,' NAIMENOVANIE ', C4,' MASSA ', C4,' YDELNAJA ', C4,' ', C4,' ', C4);
writeln (c4,' IP ', C4,' KG ', C4,' TEPLOEMKOST" ', C4,' POVERXNOST ', C4,' T ', C4);
writeln (c4,' ', c4,' ', c4,' MATERIALA ', c4,' ', c4,' ', c4);
write (c9);
for i:=2 to 15 do write (c2);
write (c11);
for i:=17 to 29 do write (c2);
write (c11);
for i:=31 to 46 do write (c2);
write (c11);
for i:=48 to 60 do write (c2);
write (c11);
for i:=62 to 72 do write (c2);
writeln (c10);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
writeln (c4,' ', c4,' ', c4,' ', c4,' ', c4,' ', c4);
gotoxy (1,18);
writeln (c4,' Summary ', C4,' ', C4,' ', C4,' ', C4,' ', C4);
write (c5);
for i:=2 to 15 do write (c2);
write (c8);
for i:=17 to 29 do write (c2);
write (c8);
for i:=31 to 46 do write (c2);
write (c8);
for i:=48 to 60 do write (c2);
write (c8);
for i:=62 to 72 do write (c2);
writeln (c6);
end;
procedure Add;
var a: vedomost;
f:file of vedomost;
Fname:string;
begin
clrscr;
write ('Vvedite ima fajla:');
readln (Fname);
vvod (a);
Assign (F, Fname);
reset (f);
Seek (F, FileSize (f));
write (F, A);
close (f);
end;
procedure view;
var f: file of vedomost;
A:vedomost;
I, z: byte;
res:integer;
S1,S2,S3,S4:real;
begin
clrscr;
write ('Vvedite ima fajla: '); readln (Fname);
assign (f, fname);
reset (f);
myframe;
S1:=0;
S2:=0;
S3:=0;
S4:=0;
for i:=0 to filesize (F)-1 do
begin
Seek (f, I);
read (f, A);
with A do
begin
T:=(a.massa*a.teploemkost)/(a.poverxnost*a.e);
S1:=S1+a.massa;
S2:=S2+a.teploemkost;
S3:=S3+a.poverxnost;
S4:=S4+T;
Summa4_T:=T;
abv;
gotoxy (2,i+6);write (naimenovanie);
gotoxy (18,i+6);write (massa:3:1);
gotoxy (32,i+6);write (teploemkost:8:1);
gotoxy (49,i+6);write (poverxnost:5:1);
gotoxy (63,i+6);
write (T:2:3);
gotoxy (20,18);write (S1:3:2);gotoxy (33,18);write (S2:3:2);
gotoxy (49,18);write (S3:3:2);gotoxy (64,18);write (S4:3:3);
end;
end;
gotoxy (5,24);
writeln ('ZMI Enter FOR EXIT FROM PROGRAM…');
readln;
close (f);
end;
procedure Del;
var i, n: byte;
f, f1: file of vedomost;
a:vedomost;
begin
clrscr;
write ('Vvedite ima fajla: '); readln (Fname);
write ('Vvedite nomer zapisi: '); readln (N);
assign (f, Fname);
reset (f);
assign (f1,'ff');
rewrite (f1);
FOR i:=0 TO Filesize (f)-1 do
begin
read (f, A);
if (I+1<>N) then
write (f1,A);
end;
close (F);
close (F1);
Erase (f);
rename (f1,fname);
writeln ('nazmi Enter…');
readln;
end;
PROCEDURE EDIT;
VAR a: vedomost;
f:file of vedomost;
n:byte;
begin
clrscr;
begin
writeln ('Vvedite ima fajla: '); readln (fname);
assign (f, Fname);
writeln ('VVedite nomer zapisi: ');
readln (n);
reset (f);
vvod (A);
Seek (f, n-1);
write (f, A);
close (F);
end;
end;
procedure menutoscr;
var i: integer;
a:vedomost;
begin
clrscr;
for i:=1 to n do
begin
gotoxy (x, y+i-1);
write (menu[i]);
end;
gotoxy (5,24);
write ('ESC-¤" п ўл室 Ё§ Їа®Јал');
textattr:=sel;
gotoxy (x, y+punkt-1);
write (menu[punkt]);
textattr:=norm;
end;
begin
clrscr;
menu[1]: ='Dobavit zapis v fail';
menu[2]: ='Redaktirovat zapis v faile';
menu[3]: ='prosmotr zapisej v fajle';
menu[4]: ='Udalit zapis iz faila';
menu[5]: ='Sozdat file';
menu[6]: ='exit';
punkt:=1;
x:=5;
y:=5; textattr:=norm;
menutoscr;
repeat
ch:=readkey;
if ch=chr (0) then
begin
ch:=readkey;
case ch of
chr (80):{strelka vniz}
if punkt
begin
gotoxy (x, y+punkt-1);
write (menu[punkt]);
punkt:=punkt+1;
textattr:=sel;
gotoxy (x, y+punkt-1);
write (menu[punkt]);
textattr:=norm;
end;
chr (72):
if punkt>1 then
begin
gotoxy (x, y+punkt-1);
write (menu[punkt]);
punkt:=punkt-1;
textattr:=sel;
gotoxy (x, y+punkt-1);
write (menu[punkt]);
textattr:=norm;
end;
end;
end
else
begin
if ch=chr (13) then begin
case punkt of
1:add;
2:edit;
3:view;
4:del;
5:createfile;
6:ch:=chr (27);{vixod}
end;
menutoscr;
end;
end;
until ch=chr (27);
end.
ДОДАТОК Б
Текст програми на мові Assembler
Title prog
.Model large
.Data
extrn Summa4_T:word
extrn S4: word
extrn t: word
.Code
public abv
abv proc far
mov bx, Summa4_T
mov cx, s4
add cx, bx
mov S4, cx
abv endP
ret
mov ah, 4Ch
int 21h
end
ДОДАТОК В
Лістинг
_Microsoft ® Macro Assembler Version 5.10 1/13/6
abv Page 1−1
1title abv
2.Model large
3.Data
4extrn e: byte
5extrn massa: byte
6extrn teploemkost: byte
7extrn t: word
8extrn poverxnost: byte
9.Data
10.Code
11Public abv
12 0000abv proc far
13 0000 A0 0000 Emov al, massa
14 0003 8A 16 0000 Emov dl, teploemkost
15 0007 F6 E2mul dl;Умножение.результат в -> AL
16 0009 8A C8mov cl, al;сохраняем чисельник в CL
17 000B A0 0000 Emov al, poverxnost
18 000E 8A 16 0000 Emov dl, e
19 0012 F6 E2mul dl;инструкция умножения
20 0014 8A D8mov bl, al;сохраняем знаменник в BL
21 0016 8A C1mov al, cl
22 0018 98cbw
23 0019 8A D3mov dl, bl
24 001B F6 F2div dl
25 001D A3 0000 Emov t, ax
26 0020abv endP
27 0020 C3ret
28 0021 B4 4Cmov ah, 4Ch
29 0023 CD 21int 21h
30end
_Microsoft ® Macro Assembler Version 5.10 1/13/6
abv Symbols-1
Segments and Groups:
N a m e Length AlignCombine Class
ABC_TEXT. .. .. .. .. ... 0025WORDPUBLIC'CODE'
DGROUP. .. .. .. .. .. .. GROUP
_DATA. .. .. .. .. ... 0000WORDPUBLIC'DATA'
Symbols:
N a m e Type Value Attr
ABV. .. .. .. .. .. ... F PROC0000ABC_TEXTGlobalLength = 0020
E. .. .. .. .. .. .. .. V BYTE0000_DATAExternal
MASSA. .. .. .. .. .. .. V BYTE0000_DATAExternal
POVERXNOST. .. .. .. .. .. V BYTE0000_DATAExternal
T. .. .. .. .. .. .. .. V WORD0000_DATAExternal
TEPLOEMKOST. .. .. .. ... V BYTE0000_DATAExternal
@CODE. .. .. .. .. .. .. TEXT abc_TEXT
@CODESIZE. .. .. .. .. .. TEXT 1
@CPU. .. .. .. .. .. ... TEXT 0101h
@DATASIZE. .. .. .. .. .. TEXT 1
@FILENAME. .. .. .. .. .. TEXT abc
@VERSION. .. .. .. .. ... TEXT 510
30 Source Lines 30 Total Lines 22 Symbols
46 730 + 447 218 Bytes symbol space free
0 Warning Errors
0 Severe Errors
ДОДАТОК Г
Результат роботи програми
На рис. 1 зображено головне меню програми Programm. pas
Рис 1 Головне меню програми
На рис. 2 зображено занесення нового запису до файлу
Рис. 2 Занесення нового запису до файлу
На рисунку 3 зображено стан програми після редагування запису
Рис. 3 Редагування файлу
На рис. 4 стан програми після вибору пункту Перегляд
Рис. 4 Перегляд
На рис. 5 Видалення запису з файлу
Рис 5 Видалення запису