это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
Ознакомительный фрагмент работы:
Кыргызский Государственный НациональныйУниверситет
ИнститутИнтеграции Международных Образовательных программ
Кыргызско-АмериканскийФакультет Компьютерных Информационных Систем и ИНТЕРНЕТ (КАФ-ИНТЕРНЕТ)
Курсовой проект
(Организация ЭВМ)
тема
Разработка программы на Ассемблере.
Выполнили: студенты группы КИС 2 – 98
Вершинин АА Исманов АА
Проверил: преподаватель Кочетов ОП
Бишкек 2001
СОДЕРЖАНИЕ
ВВЕДЕНИЕ…………………………………………………………………3
АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ………………...4
ОБЩИЙ РАЗДЕЛ…………………………………………………………21
1.1. Технико-математическоеописание задачи……….………………….21
1.2. Требованияк функциональным характеристикам…………………..23
1.3. Требованияк техническим и программным средствам………….… 25
1.3.1. Обоснованиявыбора языка программирования……………………. 26
СПЕЦИАЛЬНЫЙ РАЗДЕЛ……………………………………………………………….... 28
2.1. Постановказадачи…………………………………………………….. 28
2.2. Описание структурыпрограммы……………………………….…..… 30
2.3. Описание алгоритмарешения задачи………………………….……….32
2.4. Отладка итестирование……………………………………….………. 34
2.5. Инструкция кпользователю………………………………….……….. 35
2.6. Заключение орезультатах проектируемой задачи………….……….. 36
ПРИЛОЖЕНИЕ 1 (Системысчисления)………………………………….. 37
ПРИЛОЖЕНИЕ 2 (Структурнаясхема микропроцессора)..…………….. 44
ПРИЛОЖЕНИЕ 3 (Основныеположения алгебры логики)…….……….. 59
СПИСОК ЛИТЕРАТУРЫ…………………………………………….…. 30
ВВЕДЕНИЕ
В связи с появлениемперсональных компьютеров мгновенно вырос рынок аппаратных средств, как грибыросло число производителей, предлагающих свою продукцию. При этом, покупая тоили иное аппаратное средство, производитель не может (а иногда и не хочет)дать 100% гарантию, что оно исправно.
В связи с этим такжестремительно развивался и рынок программных тестирующих средств. На рынкесуществует огромное количество отличных диагностических программ, написанныхбольшими корпорациями: такими как Symantec inc., APS (Advanced Personal Systems), Microsoft и т.д., но всесуществующие диагностирующие программы написаны на языках высокого уровня, азначит не достаточно быстры и надёжны.
Автор проекта не берётсяконкурировать с огромными гигантами по количеству выполняемых этими программамитестов в силу того, что это бессмысленно. Была предпринята попытка написатьболее надежную, быструю диагностическую программу с использованиеммашинно-ориентированного языка программирования – Ассемблер.
АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ.
Язык программированиянаиболее полно учитывающий особенности "родного" микропроцессора исодержащий мнемонические обозначения машинных команд называется Ассемблером. Программа, написанная на Ассемблереназывается исходной программой. Далее остановимся на версии, называемой ТурбоАссемблер.
Разработка программы наАссемблере состоит из следующих этапов:
Текст программы на Ассемблересодержит следующие операции:
Действия обусловленные операциямиперечисленными в пп.б,в,г выполняются на этапе трансляции, т.е. являютсякомандами Ассемблеру. Операции, называемые командами или инструкциямивыполняются во время выполнения программы, т.е. являются командамимикропроцессору.
Инструкция записывается наотдельной строке и включает до четырех полей, необязательные из которыхвыделены [ ]:
| [метка:] | мнемоника_команды | [операнд(ы)] | [;комментарий] |
Метка или символическийадрес содержит до 31символа из букв цифр и знаков ? @ . _ $. Причем цифра не должна стоять первой,а точка, если есть должна быть первой.
Мнемоника - сокращенноеобозначение кода операции (КОП) команды, например мнемоника ADD обозначает сложение (addition).
Операндами могут быть явно илинеявно задаваемые двоичные наборы, над которыми производятся операции.Операндыприводятся в одной из четырех систем счисления и должны оканчиваться символомb(B), o(O), d(D), h(H) для 2, 8, 10 или 16-ной СС. К шестнадцатиричному числудобавляется слева ноль, если оно начинается с буквы.
Система команд может бытьклассифицирована по трем основным признакам -
Для МП 1810ВМ86 (8086) командазанимает от одного до шести байтов. Первым байтом команды всегда является кодоперации, например код команды INT XXh равен CD(HEX).
По функциональному признаку инструкцииможно разбить на пять больших групп:
Существует пять основных способовадресации:
Большинство остальных способовадресации являются комбинациями или видоизменениями перечисленнных.
В первом случае операнд(ы) располагаютсяв регистрах микропроцессора (МП), например по команде MOV AX,CXпересылается содержимое CX в AX.
При непосредственнойадресации операнд располагается в памяти непосредственно за КОП,инструкция MOV AL,0f5h записывает число 245(f5) в регистр AL.
В случае прямой адресацииза КОП следует не сам операнд, а адрес ячейки памяти или внешнего устройства,например команда IN AL,40h вводит байт данных из внешнего устройства с адресом40h.
Косвенная адресация отличается от регистровой тем, что врегистре хранится адрес операнда, т.е. по команде MOV AL,[BX] в аккумулятор alбудет записано число из ячейки памяти с адресом, хранящимся в регистре BX.
Стековая адресация производится к операндам расположенным вобласти памяти, называемой стек.
1. $ -программный счетчик. Этот символ отмечает текущий адрес в текущем сегменте.Полезен при определении длины цепочек байтов или строк.
text DB 'This string has NN letters'
NN = $ - text; NN = длине строки text (количеству байтов
в этой строке). Не путать часть строки '..NN..' и константу NN!
2. @data - адресначала сегмента данных.
....
mov ax,@data
mov ds,ax;
в сегментном регистре DS теперьадрес сегмента данных.
3. ??date, ??time,??filename - эти имена во время трансляции заменяются, соответственнона текущие дату, время и имя файла в формате ASCII.
1. () - скобки,определяют порядок вычислений
2. [] - например[BX] означает содержимое ячейки памяти с адресом в регистре bx. Признак косвеннойадресации.
3. +, -, *, / -операторы сложения, вычитания, умножения и деления.
mov ax,(2 * 3 + 8 / 2) - 2; в регистр ax будет помещено число 8.
4. MOD - делениепо модулю. Даёт остаток.
5. SHL,SHR -сдвиг операнда влево, вправо.
mov si,01010101b SHR 3; в регистр SI будет загружено число 0Ah (00001010).
6. NOT -побитовая инверсия.
7. AND,OR,XOR -операции "И","ИЛИ","ИСКЛ.ИЛИ".
mov dl, (10dOR 5d) XOR 7d; (dl) будет равно 8.
8. : -переназначение сегмента.
mov dl,[es:bx]; поместить в dlбайт данных из сегмента es и отстоящий от его начала на (bx) байтов (смещение).
9. OFFSET -оператор получения смещения адреса относительно начала сегмента (то естьколичества байтов от начала сегмента до идентификатора адреса).
mov bx, OFFSET table
1. : -определяет близкую метку (в пределах сегмента).
jmp lbl .... ....
lbl: ....
2 . = -присваивает символическому имени значение выражения.
videoram = 0B800h; присвоение videoram = 0B000h;
3. .CODE -определяет начало кодового сегмента, то есть сегмента, где располагаются кодыпрограммы.
4. .DATA -определяет начало сегмента данных.
5. DB,DW -директивы резервирующие один или несколько байтов: DB, или одно или несколькослов: DW.
....
.DATA
fibs DB 1,1,2,3,5,8,13
rus DB 'Турбо Ассемблер'
buf DB 80 DUP(0);резервируется 80 байтов,каждый обнуляется
int DW 65535;в двух байтах располагается число FFFFh.
Array DW 100 DUP (0);резервируется 100 слов
6. END -обозначает конец программы.
....
.CODE
MyPROG:....; точка входа (начало программы).
....; команды программы
....
END MyPROG
7. ENDM -окончание блока или макроопределения
8. ENDP -обозначает конец подпрограммы.
9. EQU -присваивает символическому имени или строке значение выражения.
BlkSize EQU 512
BufBlks EQU 4
BufSize EQU BlkSize * BufBlks
10. LABEL -определяет метку соответствующего типа.
....
.DATA
m_byte LABEL BYTE;метка m_byte типа BYTE позволяет теперь
m_word DW 0;иметь доступ отдельно к каждому байту данных
.CODE;m_word типа WORD
....
mov [m_word],0204h
add [m_byte],'0';теперь в m_word хранится код
add [m_byte+1],'0';3234h,ASCII код '0' равен 30h
11. LOCAL -определяет метки внутри макроопределений как локальные и в каждоммакрорасширении вместо них ассемблер вставляет уникальные метки: ??XXXX, гдеXXXX = (0000...FFFF)h. Почему ??XXXX ? Да потому что никому не должно прийти вголову начинать символическое имя с ??, и транслятор смело может генерироватьметки не боясь совпадений.
12. MACRO -задает макроопределение.
Swap MACRO a,b; a,b - параметры макро (ячейки памяти)
mov ax,b;данное макрооопределение позволяет делать
mov bx,a;обмен данными между ячейками памяти, в
mov a,ax;отличие от команды xchg ;
mov b,bx;нельзя mov a,b;
ENDM
Вызов этого макроса производитсякомандой: Swap m,n
13. .MODEL- определяет размер памяти под данные и код программы.
.MODEL tiny;под программу,данные и стек отводится один общий сегмент (64 Kb).
14. PROC -определяет начало подрограммы.
Print PROC NEAR
;здесь команды подпрограммы
Print ENDP
....
call Print;вызов подпрграммы.
15. .STACK- определяет размер стека.
.STACK 200h; выделяет 512 байтов для стека.
16. .RADIX base- определяет систему счисления по умолчанию, где base - основание системысчисления: 2, 8, 10, 16.
.RADIX 8
oct = 77; oct равно 63d.
17. ; -начало комментария.
1. MOV DST,SRC;переслать (SRC) в (DST). Здесь и далее содержимое регистра, например регистраAL будет обозначаться - (AL) или (al), а пересылка в комментарии будетобозначаться знаком <-- .
mov al,ch; (al) <-- (ch).
mov cx,dx;
mov bh,[mems];содержимое ячейки памяти с символическим адресом
mems переслать в регистр BH. Можно: mov bh,mems.
mov al,[bx];переслать в аккумулятор содержимое ячейки памяти
с адресом находящимся в регистре BX .
mov bx,OFFSET src;поместить в BX смещение адреса
ячейки памяти SRC, в текущем сегменте.
mov al,table[bx];загрузить в аккумулятор элемент таблицы байтов
с символическим адресом первого элемента table и отстоящий
от этого элемента на (bx) байтов. Другие варианты:
mov al,[table + bx] или
mov al,table + bx.
| До выполнения команды mov al,[table + bx] | Регистр BX | Регистр AL | Адрес | Код | |||||||||||||||||||||||||
| BX | 0101 1111 0000 1111 = 5F0F |
| DX | 0111 0111 0111 0111 = 7777 |
| BX (результат) | 0111 1111 0111 1111 = 7F7F |
3. XOR DST, SRC;поразрядное логическое "исключающее ИЛИ".
xor al,55h;если (AL)=5ah, то после операции (AL)=0fh.
4. NOT DST;инверсия всех битов приемника.
5. TEST DST,SRC; выполняет операцию AND над операндами, но воздействует только на флаги ине изменяет самих операндов.
6. SHR DST, CNT;логический сдвиг вправо, освобождающиеся слева биты заполняются нулем, крайнийправый бит выталкивается во флаг CF. Операнд DST может быть ячейкой памяти.
mov bl,10110010b;(CF) = x
shr bl,1;(BL) = 01011001,(CF) = 0
| до сдвига | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | (CF)=X |
| после сдвига | 0---> | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | ------> | (CF)=0 |
mov cl,4;
shr bl,cl;(BL) = 00000101,(CF) = 1.
7. SHL DST, CNT;логический сдвиг влево.
8. RLC DST, CNT;циклический сдвиг влево через перенос
9. RRC DST,CNT;циклический сдвиг вправо через перенос
10. ROR DST,CNT;циклический сдвиг влево
11. ROL DST,CNT;циклический сдвиг вправо
1. CALL SUBR;вызов подпрограммы с адресом SUBR;
call delay;
mov ....
2. RET; возвратиз подпрограммы к оператору следующему непосредственно за CALL, то есть вприведенном выше примере к MOV ..
3. JMP NAME;безусловный переход к команде с символическим адресом NAME.
jmp short name;переход к метке name, отстоящей не более
;чем на -128 или +127 байтов.
jmp near name;переход к метке name, отстоящей не более
;чем на 65535 байтов, в одном сегменте.
jmp name;аналогично jmp near name;
4. JA NAME или JNBENAME; условный переход, если, например, в результате сравнения CMP DST, SRCприемник по абсолютной величине больше источника, то перейти кметке name.
5. JB NAME или JNAENAME; условный переход, если, например, в результате сравнения CMP DST, SRCприемник по абсолютной величине меньше источника, то перейти кметке name (команды п4 и п5 выполняются по результатам выполнения операций над беззнаковымичислами).
6. JZ NAME или JENAME; перейти, если результат операции влияющей на флаг нуля - нулевой (переходпо "нулю").
7. JNZ NAME или JNENAME; переход по "не нулю". (команды п6 и п7 выполняются порезультатам выполнения операций над числами cо знаком).
1. LOOP NAME;эта команда неявно уменьшает (CX) на 1 и осуществляет переход к ближней метке,если (CX) не равно 0.
....
mov cx,64h;блок операторов от метки syc до loop syc
syc: ....;будет выполнен 100 раз.
....
loop syc
2. LOOPZ NAME илиLOOPE NAME кроме того осуществляет проверку ZF флага. Поэтомуцикл заканчивается по условию, когда (CX) = 0 или (ZF) = 0 или и то и другоевместе. Т.о. эта команда служит для обнаружения первого ненулевого результата.
3. LOOPNZ, LOOPNE- выход из цикла по "нулю".
....
mov cx,1000d;цикл может быть завершен раньше 1000
next: .... ;прохода,если содержимое аккумулятора
.... ;станет равным 129,т.е. равным ASCII коду
cmp al,'Б';буквы Б.
loopnz next
1. LODSB;команда lodsb загружает байт адресованный регистром SI из сегмента данных, иувеличивает SI на 1, если перед этим была введена команда CLD (очистить флагнаправления DF) и уменьшает SI на 1, если была использована команда STD(установить флаг направления).
....
.DATA
string DB 'abcdefg'
.CODE
....
cld;после выполнения этих команд в AL будет
mov si,OFFSET [string+2]; загружен ASCII код 'с'
lodsb;причем содержимое SI будет указывать на 'd'.
2. MOVSB; этакоманда перемещает один байт из ячейки памяти с адресом в регистре SI в ячейкупамяти с адресом в регистре DI и увеличивает (SI) и (DI) на 1. Значение SIможет находиться, как в сегменте данных DS, так и в дополнительном сегменте ES.Значение DI может находиться только в дополнительном сегменте ES.
....
.DATA
msg DB 'Всё O.K.'
LEN = $ - msg;LEN равно 8
.CODE
....
cld
lea si,msg;в SI адрес источника
mov ax,0b800h;начало сегмента видеопамяти
mov es,ax;поместить в дополнительный сегмент
lea di,es:(0a0h * 3);4-я строка сверху
mov cx,LEN;LEN - количество выводимых символов
rp: movsb;переслать символ в текущую позицию экрана
inc di;перешагнуть через позицию атрибута
loop rp;повторить до исчерпания (CX)
....;строка 'Всё O.K.' будет выведена в 4-ю строку
;дисплея сверху.
3. REP ;префиксповторения команды. Например окончание предыдущей программы может быть записанов виде:
....
mov cx,LEN;несмотря на то,что массив'Всё O.K.'будет
rep movsb;скопирован в область памяти B800:(A0 * 3), на
;экран дисплея будет выведено: ВёOK. Почему?
4. CMPSB;осуществляет сравнение байта строки источника c адресом (SI) и байта строкиприемника с адресом (DI): то есть производит вычитание ((SI)) - ((DI)). Непутать с командой CMP DST, SRC в которой наоборот, производится вычитаниеисточника из приемника. Команда CMPSB неявно уменьшает (CX) на 1 и увеличивает(SI) и (DI) на 1, если (DF) = 0.
5. REPZ или REPE;префикс повторения. Выполнение команды завершается, когда (CX) = 0 или (ZF) =0.
....
.DATA
src DB 'To be, or not to be'
dst DB 'To be ,or not to be'
len = $ - dst;len равно 19
.CODE
....
cld; (DF) = 0
push ds;совместить адреса
pop es;сегментов ds и es
mov cx,len;длину строки dst переслать в cx
lea di,dst;загрузить адрес(смещение) строки dst в DI
lea si,src
repe cmpsb;сравнивать побайтно
je equal;если все байты совпали, то перейти к метке
not cx;если нет - вычислить номер несовпадающих байт
add cx,len;
jmp notequal;
equal: ....
....
notequal: ....
В конце этого примера номерпервого несовпадающего байта (CX) = 5.
1. CLC; сброситьфлаг переноса (CF) = 0.
2. STC;установить флаг переноса (CF) = 1.
3. CMC;инвертировать флаг пнреноса.
4. CLD; очиститьфлаг направления (DF) = 0, в этом случае операции над строками (цепочкамибайтов) будут производиться от младшего адреса к старшему.
5. STD;установить флаг направления (DF) = 1,обработка цепочек байтов производится отстаршего адреса к младшему.
6. STI;установить флаг прерываний (IF) = 1, разрешить прерывания от внешних устройств.
7.CLI; очиститьфлаг прерываний.
8. NOP; холостаяоперация.
1. INT INUM; этакоманда вызывает программное прерывание, то есть переход к ячейке памяти садресом хранящимся в четырех байтах, начиная с адреса INUM * 4, где INUM =(0...255). Это 4-х байтовое число является указателем подпрограммы обработчикаданного прерывания, и иначе называется вектором прерывания.Таким образом первыйкилобайт памяти 256 * 4 отводится под векторы прерываний.
Операции инициируемыепрограммными прываниями определяются кодом в регистре AH, например:
....
mov ah,14d;функция вывода символа на дисплей,с последующимм
mov al,31h;продвижением курсора на одну позицию вправо.
int 10h;на экран будет выведена цифра '1'(ASCII код 31h).
....
.DATA
privet DB 'Добрый morning !','$';
.CODE
....
lea dx,privet;специальная функция регистра DX
mov ah,9;9 - функция вывода на экран дисплея
int 21h;будет выведено приветствие ....
В таблицу включены только теинструкции, которые влияют на флаги.
"+" - обозначает, чтокоманда влияет на флаг, "-" - не влияет, "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
Таблица возможныхсостояний устройств