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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ…………………………………………………………………..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