СОДЕРЖАНИЕ
ВВЕДЕНИЕ…………………………………………………………………..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