Реферат: Разработка программы на Ассемблере
"+" - обозначает, что команда влияет на флаг, "-" - не влияет, "1" - флаг устанавливается в 1, "0" - флаг устанавливается в 0 (сбрасывается), "#" - инверсия флага, "?" - не определенное значение флага, >1 - одиночный сдвиг, >n - многоразрядный сдвиг.
ПРИМЕЧАНИЯ
1. R1,R2 - одно- или двухбайтные регистры.
2. RP - двухбайтные регистры.
3. SRC,DST -источник,приемник (регистр или ячейка па-
мяти)
4. M,M1,M2 -ячейки памяти с символическими адресами M,
M1 и M2.
5. CNT - счетчик,регистр CL или CX.
6. SUBR,NAME - символический адрес (метка начала
подпрограммы или блока операторов).
7. Во всех командах условных переходов метка NAME
должна отстоять от команды перехода не более,чем на -128
или +127 байтов.
8. INUM - номер прерывания.
ОБЩИЙ РАЗДЕЛ
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 | Макрос | Очищает экран |
Макрос | Выводит на экран строку | |
Press | Макрос | Реализует задержку |
ShowQuestion | Процедура | Выводит на экран меню |
SborSved | Процедура | Осуществляет сбор сведений |
TestMem | Процедура | Осуществляет тест памяти |
При выполнении программы на экран выводится аннотация, пользователь, ознакомившись с программой, нажимает на любую клавишу, и на экран выводится меню (с помощью процедуры ShowQuestion), в котором пользователь может выбрать интересующий его пункт меню:
- сбор сведений о ПК;
- тест памяти;
- выход.
Если выбран первый пункт, выполняется процедура ShowSved. Внутри данной процедуры реализована очистка экрана, с помощью макроса ClrScr, а также диагностика оборудования и задержка, реализованные с помощью макроса press. После выполнения данной процедуры программа переходит в начало, т.е. в меню.