Разработка программы диагностики и тестирования аппаратных средств ПК

Разработка программы диагностики и тестирования аппаратных средств ПК

СОДЕРЖАНИЕ

ВВЕДЕНИЕ…………………………………………………………………..4

ОБЩИЙ РАЗДЕЛ……………………………………………………………5

1. Технико-математическое описание задачи……….…………………5

2. Требования к функциональным характеристикам………………….7

3. Требования к техническим и программным средствам………….…8

1. Обоснования выбора языка программирования…………………….9

СПЕЦИАЛЬНЫЙ РАЗДЕЛ………………………………………………..11

2.1. Постановка задачи……………………………………………………..11

2.2. Описание структуры программы…………………………………..…12

2.3. Оисание алгоритма решения задачи………………………………….14

2.4. Отладка и тестирование……………………………………………….16

2.5. Инструкция к пользователю…………………………………………..17

2.6. Заключение о результатах проектируемой задачи…………………..18

ПРИЛОЖЕНИЕ 1…………………………………………………………..19

ПРИЛОЖЕНИЕ 2…………………………………………………………..21

СПИСОК ЛИТЕРАТУРЫ………………………………………………….30

ВВЕДЕНИЕ

В связи с появлением персональных компьютеров мгновенно вырос рынок

аппаратных средств, как грибы росло число производителей, предлагающих свою

продукцию. При этом, покупая то или иное аппаратное средство, производитель

не может (а иногда и не хочет) дать 100% гарантию, что оно исправно.

В связи с этим также стремительно развивался и рынок пограммных

тестирующих средств. На рынке существует огромное количество отличных

диагностических программ, написанных большими корпорациями: такими как

Symantec inc., APS (Advanced Personal Systems), Microsoft и т.д., но все

сущестующие диагностирующие программы написаны на язках высокого уровня, а

значит не достаточно быстры и надёжны.

Автор проекта не берётся конкурировать с огромными гигантами по

количеству выполняемых этими программами тестов в силу того, что это

бессмысленно. Была предпринята попытка написать более надежную, быструю

диагностическую программу с использованием машино-ориентированного языка

программирования – Ассемблер.

ОБЩИЙ РАЗДЕЛ

1.1. Технико-математическое описание задачи

Программа делится на две части:

Первая часть программы - Сбор сведений - это часть программы,

собирающая справки об оборудовании, установленном на ПК, на котором

программа выполняется. Справки наводятся о следующих устройствах:

- математическом сопроцессоре;

- СОМ портах;

- LPT портах;

- дисководах;

- CD-ROM приводах;

- расширенном управлении электропитанием;

- манипуляторе «мышь».

Математический сопроцессор – это микрочип, устанавливаемый на

материнскую плату, который работает совместно с основным процессором,

осуществляет обработку чисел с плавающей точкой, тем самым разгружая

основной процессор. Может устанавливаться опционально по желанию

пользователя либо самим пользователем, т.е. может либо присутствовать, либо

отсутствовать.

СОМ порты – это порты с последовательным типом передачи данных,

предназначенные для подключения коммуникационных, манипуляторных и других

устройств, где требуется сравнительно не- большая скорость передачи данных.

Количество установленных последовательных портов может варьироваться от

одного до четырёх. На некоторых материнских платах существует ограничение

на подключение последовательных портов, например: если это значение будет

два, и если вы подключите четыре порта, то работать будут все равно два.

LPT порты – это порты с параллельным типом передачи данных,

предназначенные для подключения принтеров и других устройств, где требуется

относительно большая скорость передачи данных, а также могут использоваться

для соединения двух компьютеров между собой для обмена данными. Количество

установленных LPT портов может варьироваться от одного до четырёх.

Дисковод – устройство, предназначенное для чтения/записи накопителей

на магнитном диске (гибкий диск). Существует четыре типа дисководов:

- 360 Кб.;

- 720 Кб.;

- 1.2 Мб.;

- 1.44 Мб.

Они различаются по формату обслуживаемых дискет и максимально возможному

объему данных, записываемых на дискету соотвестсвующего типа.

CD-ROM привод – устройство, предназначенное только для чтения

накопителей на лазерных дисках. Различаются по скорости доступа к данным и

скоростью вращения лазерного диска. Обычно устанавливают не более одного

привода.

РУЭ (расширенное управление электропитанием) – стандарт, служащий для

экономии электроэнергии. Представляет собой следующий набор функций:

- автоматическое отключение электропитания;

- «спящий» режим;

- автоматическое отключение питания монитора;

- автоматическое отключение питания жестких дисков.

Может находиться в двух состояниях: включено или выключено.

Вторая часть программы - диагностика памяти - проверяет на

работоспособность память ПК, на котором выполняется программа.

1.2. Требования к функциональным характеристикам

При запуске программы на экран должна выводиться аннотация, затем,

после нажатия на любую клавишу, должен очищаться экран и появляться меню

из трех пунктов:

1 – сбор сведений о системе;

2 – тест памяти;

3 – выход.

Для выбора интересующего пункта необходимо нажать на клавиатуре цифры,

соответствующие номерам пунктов.

В случае выбора пункта «Сбор сведений о системе» выполняется

последовательный вывод информации о ПК в виде списка устройств с текущим

состоянием. Ниже приведена таблица со списком устройств и их возможными

состояниями.

Таблица 1

Таблица возможных состояний устройств

|Устройство |Возможные состояния |

|Математический сопроцессор |Присутствует, отсутствует |

|Максимальное количество |От 0 до 4 |

|подключаемых СОМ-портов | |

|Количество CОМ-портов |От 0 до 4 |

|Количество LPT-портов |От 0 до 4 |

|Первый дисковод |Отсутствует, 360Kb, 720Kb, 1.2Mb, |

| |1.44Mb. |

|Второй дисковод |Отсутствует, 360Kb, 720Kb, 1.2Mb, |

| |1.44Mb. |

|Количество установленных CD-ROM |От 0 до 4 |

|приводов | |

|Расширенное управление |Отсутсвует, присутствует, |

|электропитанием(APM) |включено/выключено |

|Манипулятор «мышь» |Отсутствует, присутствует |

После вывода списка устройств, в программе необходимо реализовать задержку,

затем возврат в меню.

В случае выбора пункта «тест памяти» программа должна выполнять

тестирование не менее 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 – сбор сведений о системе;

2 – тест памяти;

3 – выход.

Сбор сведений должен осуществляться в виде списка устройств с текущим

состоянием. Состояние от названия устройства должно отделяться двоеточием.

Список устройств и возможных их состояний см. в таблице 1.

Пункт «тест памяти» должен осуществлять проверку ячеек памяти на

работоспособность. Существует два типа неисправностей ячеек памяти:

- «постоянные нули»;

- «постоянные единицы».

Вид неисправности «постоянные нули» заключается в следующем:

предположим, что бит №4 в байте, изображенном на рис. 1 – неисправный. В

данный момент в байт записано число ноль (восемь нулей в двоичной системе

cчисления), если считать содержимое этого байта, то на выходе получиться

ноль – вроде бы он исправен.

7 6 5 4 3 2 1 0

|0 |0 |0 |0 |0 |0 |0 |0 |

рис. 1

Но это лишь только видимость, если в этот байт записать число FFh (восемь

единиц в шестнадцатиричной системе счисления), что в двоичной системе

счисления эквивалентно восьми единицам, то получится картина,

представленная на рис. 2. В этом случае, если считать содержимое этого

байта, на выходе получиться EFh, то есть, записывая в бит №4 единицу, мы

при считывании все равно получаем ноль. Следовательно бит № 4, а значит и

байт, неисправен.

7 6 5 4 3 2 1 0

|1 |1 |1 |0 |1 |1 |1 |1 |

рис. 2

Вид неисправности «постоянные единицы» схож с видом «постоянные

нули». Разница состоит лишь в том, что в виде «постоянные нули» неисправные

биты находятся всегда в нулевом состоянии, а в виде «постоянные единицы» в

единичном.

В связи с этим необходимо реализовать проверку ячеек памяти на два

вида неисправностей: «постоянные нули» и «постоянные единицы».

2.2. Описание структуры программы

Программа была реализована с помощью нескольких пользовательских

процедур и макросов (см. таблицу 2).

Довольно часто в программах, особенно больших, приходится несколько

раз решать одну и ту же подзадачу и поэтому приходится выписывать

одинаковую группу команд, решающих эту подзадачу. Чтобы избежать повторного

выписывания такой группы команд, ее обычно выписывают один раз и оформляют

соответствующим образом, а затем в нужных местах программы просто передают

управление на эти команды, которые, проработав, возвращают управление

обратно. Такая группа команд, которая решает некоторую подзадачу и которая

организована таким образом, называется процедурой.

Нередко бывает полезным предварительное(до начала трансляции)

преобразование текста программы. Например, может потребоваться, чтобы какой-

то фрагмент программы был продублирован несколько раз или чтобы в

зависимости от некоторых условий в тексте программы были сохранены одни

фрагменты и удалены другие. Подобную возможность предоставляют так

называемые макросредства. Расширение языка ассемблера за счет этих средств

обычно называют макроязыком.

Программа, написанная на макроязыке, транслируется в два этапа.

Сначала она переводится на, так сказать, чистый язык ассемблера, т.е.

преобразуется к виду, где нет никаких макросредств. Этот этап называется

макрогенерация, его осуществляет специальный транслятор – макрогенератор.

На втором этапе полученная программа переводится на машинный язык. Это этап

ассемблирования, его осуществляет ассемблер.

Таблица 2

Таблица процедур и макросов

|Название |Тип |Назначение |

|Movcur |Макрос |Премещает курсор |

|Clrscr |Макрос |Очищает экран |

|Print |Макрос |Выводит на экран строку |

|Press |Макрос |Реализует задержку |

|ShowQuestion |Процедура |Выводит на экран меню |

|SborSved |Процедура |Осуществляет сбор сведений |

|TestMem |Процедура |Осуществляет тест памяти |

При выполнении программы на экран выводится аннотация, пользователь,

ознакомившись с программой, нажимает на любую клавишу, и на экран выводится

меню (с помощью процедуры ShowQuestion), в котором пользователь может

выбрать интересующий его пункт меню:

- сбор сведений о ПК;

- тест памяти;

- выход.

Если выбран первый пункт, выполняется процедура ShowSved. Внутри

данной процедуры реализована очистка экрана, с помощью макроса ClrScr, а

также диагностика оборудования и задержка, реализованные с помощью макроса

press. После выполнения данной процедуры программа переходит в начало, т.е.

в меню.

В случае выбора второго пункта, выполняется процедура TestMem,

тестирующая оперативную память ПК. Также внутри данной процедуры

реализованы очистка экрана и задержка перед выходом в меню.

Если выбран третий пункт, программа, не очищая экран, передает

управление операционной системе DOS .

2.3. Описание алгоритма решения задачи

Если в оперативной памяти ПК имеется 2 в 20 степени ячеек, то для

ссылок на эти ячейки нужны 20-разрядные адреса; их принято называть

физическими адресами. Ясно, что при большом объеме памяти большим будет и

размер физических адресов, а это ведет к увеличению длины команд и к

увеличению размера программ в целом. Это плохо. Чтобы сократить размеры

команд, поступают следующим образом.

Память условно делят на участки, которые принято называть сегментами.

Начальные адреса сегментов могут быть любыми, но на длину сегментов

накладывается ограничение: размер любого сегмента не должен превышать 64Кб.

В этих условиях физический адрес А любой ячейки памяти можно

представить в виде суммы A=B+ofs, где В – адрес сегмента, а ofs – смещение

относительно адреса В.

Таким образом ,если в команде надо указать физический адрес А, то

адрес сегмента B – “прячем” в так называемый сегментный регистр, а в

команде указываем лишь этот регистр и слагаемое ofs. Это даёт экономию

размера команд.

В связи с этим максимальный объем сегмента равен 64Кб, а минимальный

равен 16 байтам.

Процедура теста памяти реализована с помощью вложенного цикла. Первый

цикл увличивает на еденицу модификационный регистр BP до тех пор, пока BP

меньше 0A000h (это последний сегмент 640 Кб). Внутри этого цикла реализован

еще один цикл - он увеличивает на единицу модификационный регистр SI до тех

пор, пока он меньше 16. Внутри вложенного цикла осуществляется

непосредственно проверка памяти на неисправные биты: сначала происходит

проверка на «постоянные единицы» - в сегмент по адресу BP со смещением SI

записываеться ноль (что в двоичной системе счисления означает восемь

нулей), затем осуществляется проверка этого значения, т.е. нуля. Если это

значение равно нулю, значит память исправна, в противном случае - не

исправна. Затем происходит проверка на «постоянные нули»: по тому же

адресу записывается число FFh (что в двоичной системе счисления означает

восемь едениц), затем осущесвляется проверка этого значения. Если значение

равно FFh, значит память исправна, в противном случае - неисправна.

2.4. Отладка и тестирование

Тестирование производилось с помощью отладчика Turbo Debugger

корпорации Borland. Была выполнена трассировка всей программы. Трассировка

– это процесс пошагового выполнения команд с листингом состояний всех

регистров, флагов, сегмента данных на момент выполнения каждой команды.

В ходе трассировки были обнаружены следующие ошибки:

неправильное определение состояния математического сопроцессора -

неправильно указанная маска очистки, так называемого слова «equpment list»,

получаемого с помощью прерывания 11h;

“зависание” при вызове процедуры TestMem - ошибка в реализации

алгоритма теста памяти – неправильно указанная метка перехода во вложенном

цикле.

Кроме того, было обнаружено множество ошибок в синтаксисе команд.

Так как программа писалась на одном компьютере, проверить её на

правильность определения конфигурации ПК не представлялось возможным,

поэтому, после завершения программы, она выполнялась на разных ПК с разными

конфигурациями: в ходе этого теста ошибок обнаруженно не было – все

аппаратные средства определялись правильно.

Также невозможно было проверить программу на правильность теста

памяти на практике, потому что она выполнялась на всех ПК с исправной

памятью, а попытки найти ПК с заведомо неисправной оперативной памятью не

увенчались успехом. Тем не менее теоретически тест должен работать

правильно.

2.5. Инструкция к пользователю

Для запуска программы выполните файл с именем «kurs.com». Вашему

вниманию предоставиться аннотация – внимательно прочитайте её, а затем

нажмите любую клавишу на клавиатуре (например, enter). Затем на экране

высветится меню, изображенное на рис. 3.

| |

|1 – Сведения о системе |

|2 - Тест памяти |

|3 – Выход |

| |

|Ваш выбоp ? : |

рис. 3

Для того, чтобы получить краткие сведения о вашем ПК - нажмите

клавишу «1», затем «Enter» на вашей клавиатуре, и на экран высветится

список устройств с текущем состоянием. Для возврата в меню нажмите любую

клавишу.

Для того, чтобы протестировать оперативную память вашего ПК – нажмите

клавишу, «2» затем «Enter» на вашей клавиатуре, и на экране высветится

сообщение о состоянии памяти вашего ПК. Для возврата в меню нажмите любую

клавишу.

Для того, чтобы выйти из программы - нажмите клавишу «3», затем

«Enter» на вашей клавиатуре.

2.6. Заключение о результатах проектируемой задачи

В ходе выполнения поставленной в курсовом проекте задачи были

приобретены навыки реализации сложных ассемблерных программ с

использованием макросов и процедур. Кроме того, был получен огромный опыт и

умение работы с CMOS (область памяти, где хранятся сведения о конфигурации

ПК) на низком уровне, т.е. с использованием прерывания BIOS 11h и 70h

порта, а также опыт использования дополнительных сегментных регистров и

регистров модификаторов.

Реализованная программа может быть полезна при диагностике

оборудования на относително старых моделях ПК, поскольку в программе

используется система команд 8086 процессора, который был выпущен в 1979 г.

корпорацией Intel, и сейчас эта модель процессора является устаревшей.

СПИСОК ЛИТЕРАТУРЫ

1. В.Н. Пильщиков. Программирование на языке ассемблера IBM PC. – М.:Диалог-

МИФИ. 1997