Після виведення списку пристроїв, в програмі необхідно реалізувати затримку, потім повернення в меню.
У разі вибору пункту «тест пам'яті» програма повинна виконувати тестування не менше 640Кб. пам'яті. У разі якщо пам'ять справна, на екран виводитися повідомлення «тест пройдено», в іншому випадку «тест не пройдений». Також необхідно реалізувати затримку і повернення в меню.
У разі вибору пункту «вихід», необхідно реалізувати завершення роботи програми і передачу управління операційній системі DOS.
1.3. Вимоги технічних і програмних засобів
Програма виконана на мові асемблера 8086 процесора,
Відповідно їй необхідний IBM PC - сумісний комп'ютер з процесором не нижче 8086, також програма може виконуватися на комп'ютерах з процесорами старшого покоління (наприклад: 80286 або 80386), тому що особливістю архітектури 80х86 є наступність на рівні машинних команд: програми, написані для молодших моделей процесорів, без будь-яких змін можуть бути виконані на більш старших моделях.
Компілює код програми займає всього 2 Кб - це пов'язано з відсутністю надлишкового коду, якого дуже багато при використанні мов високого рівня. У зв'язку з цим програма може легко поміститися на дискету 360 Кб.
Програма працює в текстовому режимі і не використовує колірної гами, тому їй досить монітора CGA. Крім того вона може без будь-яких змін працювати на моніторах старшого покоління таких, як EGA, VGA і SVGA.
Так як програма тестує 640 Кб оперативної пам'яті, цей обсяг являеться мінімумом.
1.3.1. Обгрунтування вибору мови програмування
Для написання даної програми була вибрана мова асемблера. У зв'язку з тим, що він найбільш підходить для реалізації такого роду завдань, тобто де вимагаєте досуп до портів, виконання спеціальних переривань, доступ до області пам'яті BIOS і т.д.
Для будь-якої ЕОМ можна придумати різні мови асемблера, хоча б тому, що можна по-різному позначати машинні операції. В частості, і для ПК розроблено кілька таких мов (ASM-86, MASM, TASM). Для реалізації даного завдання була вибрана мова, який створений фірмою Borland і повна назва якого - турбоассемблер, скорочено TASM. Треба відзначити, що ця мова найбільш часто використовується на ПК.
2.1. Постановка задачі
Розробити програму тестування оперативної пам'яті і збору відомостей про ПК.
Реалізувати меню, в якому користувачеві пропонується вибір з трьох пунктів:
1 - збір відомостей про систему;
Збір відомостей має здійснюватися у вигляді списку пристроїв з поточним станом. Стан від назви пристрою повинно відділятися двокрапкою. Список пристроїв і можливих їх станів див. У таблиці 1.
Пункт «тест пам'яті» має здійснювати перевірку елементів пам'яті на працездатність. Існує два типи несправностей елементів пам'яті:
Пошкодження «постійні нулі» полягає в наступному: припустимо, що біт №4 в байті, зображеного на рис. 1 - несправний. В даний момент в байт записано число нуль (вісім нулів у двійковій системі cчісленія), якщо вважати вміст цього байта, то на виході вийти нуль - начебто він справний.
7 6 5 4 3 2 1 0
Пошкодження «постійні одиниці» схожий з видом «постійні нулі». Різниця полягає лише в тому, що у вигляді «постійні нулі» несправні біти знаходяться завжди в нульовому стані, а у вигляді «постійні одиниці» в одиничному.
У зв'язку з цим необхідно реалізувати перевірку елементів пам'яті на два види несправностей: «постійні нулі» і «постійні одиниці».
2.2. Опис структури програми
Програма була реалізована за допомогою декількох призначених для користувача процедур і макросів (див. Таблицю 2).
Досить часто в програмах, особливо великих, доводиться кілька разів вирішувати одну і ту ж підзадачі і тому доводиться виписувати однакову групу команд, вирішальних цю підзадачу. Щоб уникнути повторного виписування такої групи команд, її зазвичай виписують один раз і оформляють відповідним чином, а потім в потрібних місцях програми просто передають управління на ці команди, які, пропрацювавши, повертають управління назад. Така група команд, яка вирішує деяку підзадачі і яка організована таким чином, називається процедурою.
Нерідко буває корисним попереднє (до початку трансляції) перетворення тексту програми. Наприклад, може знадобитися, щоб якийсь фрагмент програми був продубльований кілька разів або щоб в залежності від деяких умов в тексті програми були збережені одні фрагменти і вилучені інші. Подібну можливість надають так звані макросредства. Розширення мови асемблера за рахунок цих коштів зазвичай називають макромовою.
Програма, написана на макромови, транслюється в два етапи. Спочатку вона перекладається на, так би мовити, чиста мова асемблера, тобто перетвориться до виду, де немає ніяких макросредств. Цей етап називається макрогенерацій, його здійснює спеціальний транслятор - макрогенератор. На другому етапі отримана програма перекладається на машинний мову. Це етап ассемблирования, його здійснює асемблер.
Таблиця процедур і макросів
При виконанні програми на екран виводиться анотація, користувач, ознайомившись з програмою, натискає на будь-яку клавішу, і на екран виводиться меню (за допомогою процедури ShowQuestion), в якому користувач може вибрати що цікавить його пункт меню:
збір відомостей про ПК;
Якщо обраний перший пункт, виконується процедура ShowSved. Усередині даної процедури реалізована очищення екрана, за допомогою макросу ClrScr, а також діагностика обладнання і затримка, які реалізовані за допомогою макросу press. Після виконання даної процедури програма переходить в початок, тобто в меню.
У разі вибору другого пункту, виконується процедура TestMem, тестуються оперативну пам'ять ПК. Також всередині даної процедури реалізовані очищення екрана і затримка перед виходом в меню.
Якщо обраний третій пункт, програма, не очищаючи екран, передає управління операційній системі DOS.
2.3. Опис алгоритму розв'язання задачі
У зв'язку з цим максимальний обсяг сегмента дорівнює 64Кб, а мінімальний дорівнює 16 байтам.
2.4. Налагодження і тестування
Тестування проводилося за допомогою відладчика Turbo Debugger корпорації Borland. Була виконана трасування всієї програми. Трасування - це процес покрокового виконання команд з лістингом станів всіх регістрів, прапорів, сегменту даних на момент виконання кожної команди.
В ході трасування були виявлені такі помилки:
неправильне визначення стану математичного співпроцесора - неправильно зазначена маска очищення, так званого слова «equpment list», одержуваного за допомогою переривання 11h;
"Зависання" при виклику процедури TestMem - помилка в реалізації алгоритму тесту пам'яті - неправильно вказана мітка переходу у вкладеному циклі.
Крім того, було виявлено безліч помилок в синтаксисі команд.
Так як програма писалася на одному комп'ютері, перевірити її на правильність визначення конфігурації ПК було неможливо, тому, після завершення програми, вона виконувалася на різних ПК з різними конфігураціями: в ході цього тесту помилок обнаруженно не було - всі апаратні засоби визначалися правильно.
Також неможливо було перевірити програму на правильність тесту пам'яті на практиці, тому що вона виконувалася на всіх ПК з справної пам'яттю, а спроби знайти ПК з завідомо несправною оперативною пам'яттю не увінчалися успіхом. Проте теоретично тест повинен працювати правильно.
2.5. Інструкція до користувача
Для запуску програми виконайте файл з ім'ям «kurs.com». Вашій увазі буде забезпечено анотація - уважно прочитайте її, а потім натисніть будь-яку клавішу на клавіатурі (наприклад, enter). Потім на екрані висвітиться меню, зображене на рис. 3.