Кыргызский Государственный Национальный Университет

Институт Интеграции Международных Образовательных программ

Кыргызско-Американский Факультет Компьютерных Информационных Систем и ИНТЕРНЕТ (КАФ-ИНТЕРНЕТ)

Курсовой проект

(Организация ЭВМ)

тема

Разработка программы на Ассемблере.

Выполнили: студенты группы КИС 2 – 98

Вершинин АА Исманов АА

Проверил: преподаватель Кочетов ОП


Бишкек 2001

СОДЕРЖАНИЕ

ВВЕДЕНИЕ…………………………………………………………………3

АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ………………...4

ФОРМАТ КОМАНД И ИХ КЛАССИФИКАЦИЯ ………………………….5 НЕКОТОРЫЕ ОПЕРАТОРЫ, ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА, ДИРЕКТИВЫ И КОМАНДЫ   АССЕМБЛЕРА 80X86(8088) ……………..7 КОМАНДЫ ПЕРЕСЫЛКИ …………………………………………………11 АРИФМЕТИЧЕСКИЕ КОМАНДЫ ………………………………………..12 ЛОГИЧЕСКИЕ КОМАНДЫ И КОМАНДЫ СДВИГА …………………...14 КОМАНДЫ УПРАВЛЕНИЯ МИКРОПРОЦЕССОРОМ …………………18 ПРИМЕЧАНИЯ………………………………………………………………20

ОБЩИЙ РАЗДЕЛ…………………………………………………………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 и т.д., но все существующие диагностирующие программы написаны на языках высокого уровня, а значит не достаточно быстры и надёжны.

Автор проекта не берётся конкурировать с огромными гигантами по количеству выполняемых этими программами тестов в силу того, что это бессмысленно. Была предпринята попытка написать более надежную, быструю диагностическую программу с использованием машинно-ориентированного языка программирования – Ассемблер.

 

 

АССЕМБЛЕР. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММЫ.

Язык программирования наиболее полно учитывающий особенности "родного" микропроцессора и содержащий мнемонические обозначения машинных команд называется Ассемблером. Программа, написанная на Ассемблере называется исходной программой. Далее остановимся на версии, называемой Турбо Ассемблер.

Разработка программы на Ассемблере состоит из следующих этапов:

1) Составление алгоритма в виде блок-схемы или структурного описания, 2) Ввод в ЭВМ текста исходной программы PROG.ASM с помощью редактора текстов. Имя PROG может быть произвольным, а расширение ASM - обязательно, 3) Перевод (трансляция или ассемблирование) исходной программы в машинные коды с помощью транслятора TASM.EXE. На этом этапе получается промежуточный продукт PROG.OBJ (объектный код). Выявленные при этом синтаксические и орфографические ошибки исправляются повтором пп.2 и 3, 4) Преобразование с помощью программы TLINK.EXE объектного кода PROG.OBJ в выполнимый код PROG.EXE или PROG.COM. 5) Выполнение программы и ее отладка начиная с п.1, если встретились логические ошибки.

Текст программы на Ассемблере содержит следующие операции:

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

Действия обусловленные операциями перечисленными в пп.б,в,г выполняются на этапе трансляции, т.е. являются командами Ассемблеру. Операции, называемые командами или инструкциями выполняются во время выполнения программы, т.е. являются командами микропроцессору.

ФОРМАТ КОМАНД И ИХ КЛАССИФИКАЦИЯ

Инструкция записывается на отдельной строке и включает до четырех полей, необязательные из которых выделены [ ]:

[метка:] мнемоника_команды [операнд(ы)] [;комментарий]

Метка или символический адрес содержит до 31 символа из букв цифр и знаков ? @ . _ $. Причем цифра не должна стоять первой, а точка, если есть должна быть первой.

Мнемоника - сокращенное обозначение кода операции (КОП) команды, например мнемоника ADD обозначает сложение (addition).

Операндами могут быть явно или неявно задаваемые двоичные наборы, над которыми производятся операции.Операнды приводятся в одной из четырех систем счисления и должны оканчиваться символом b(B), o(O), d(D), h(H) для 2, 8, 10 или 16-ной СС. К шестнадцатиричному числу добавляется слева ноль, если оно начинается с буквы.

Система команд может быть классифицирована по трем основным признакам -

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

Для МП 1810ВМ86 (8086) команда занимает от одного до шести байтов. Первым байтом команды всегда является код операции, например код команды INT XXh равен CD(HEX).

По функциональному признаку инструкции можно разбить на пять больших групп:

1) команды пересылки данных, 2) арифметические команды, 3) логические команды, 4) команды переходов и 5) команды управления.

Существует пять основных способов адресации:

регистровая, непосредственная, прямая, косвенная и стековая.

Большинство остальных способов адресации являются комбинациями или видоизменениями перечисленнных.

В первом случае операнд(ы) располагаются в регистрах микропроцессора (МП), например по команде MOV AX,CX пересылается содержимое CX в AX.

При непосредственной адресации операнд располагается в памяти непосредственно за КОП, инструкция MOV AL,0f5h записывает число 245(f5) в регистр AL.

В случае прямой адресации за КОП следует не сам операнд, а адрес ячейки памяти или внешнего устройства, например команда IN AL,40h вводит байт данных из внешнего устройства с адресом 40h.

Косвенная адресация отличается от регистровой тем, что в регистре хранится адрес операнда, т.е. по команде MOV AL,[BX] в аккумулятор al будет записано число из ячейки памяти с адресом, хранящимся в регистре BX.

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

НЕКОТОРЫЕ ОПЕРАТОРЫ, ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА, ДИРЕКТИВЫ И КОМАНДЫ   АССЕМБЛЕРА 80X86(8088) ПРЕДОПРЕДЕЛЕННЫЕ ИМЕНА

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, (10d OR 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

Адрес

Код

0010 XX 0800 (table)
08xx xx
0810 58

После выполнения команды

mov al,[table + bx]

   Регистр BX

Регистр AL

Адрес

Код

0010 58 0800 (table)
08xx xx
0810 58

2. PUSH RP; поместить на вершину стека содержимое пары регистров RP (например push bx).

3. POP RP; снять с вершины стека два байта и поместить в пару RP (например pop ax).

4. XCHG DST, SRC; поменять местами содержимое (DST) и (SRC). Оба операнда не могут быть одновременно содержимым ячеек памяти.

5. XLAT SRC; извлечь из таблицы с начальным адресом SRC байт данных имеющий номер от начала таблицы = (AL), и поместить его в AL. Адрес SRC должен находиться в регистре BX. Другой вариант: XLATB.

 

....

.DATA

src DB 15d,10h,00110101b,'A','B',166d

.CODE

....

mov al,2; в результате выполнения этих трех команд

mov bx,OFFSET src; в регистр AL будет загружен код

xlatb; 00110101b = 35h = 53d = ASCII'5'

6. IN ACCUM, PORT; поместить в аккумулятор AL или AX байт или слово из порта с адресом PORT. Если адрес порта <= FF то адрес порта может указываться непосредственно, если адрес порта > FF, то адрес порта указывается косвенно, через содержимое регистра DX (специальная функция регистра общего назначения).

 

in al,0a5h;ввести в AL байт данных из ВУ с адресом порта A5h ....

mov dx,379h;ввести в аккумулятор AL байт данных из

in al,dx;внешнего устройства с адресом порта 379h

7. OUT PORT, ACCUM; переслать из аккумулятора AL или AX байт или слово в ВУ с символическим адресом PORT.

 

out 0ffh,al;

....

mov dx,37Ah;переслать слово данных из AX в ВУ с адре-

out dx,ax;сом порта 37Ah

8. LEA RP,M; загрузить в регистр RP эффективный адрес (смещение) ячейки памяти с символическим адресом M.

lea di, rus; аналог этой команды - mov di, OFFSET rus.

 АРИФМЕТИЧЕСКИЕ КОМАНДЫ

1. ADD DST, SRC; сложить содержимое SRC и DST и результат переслать в DST.

  add al, [mem_byte]; mem_byte однобайтовая ячейка памяти

  add [mem_word], dx; mem_word двухбайтовая ячейка памяти

  add ch,10001010b;

2. INC DST; увеличить (DST) на 1 (инкремент (DST)).

 

inc si; (SI) <-- (SI) + 1.

inc count; (count) <-- (count) + 1.

3. SUB DST, SRC; вычесть (SRC) из (DST) и результат поместить в DST.

4. DEC DST; декремент (DST).

5. CMP DST, SRC; сравнить содержимое DST и SRC. Эта команда выполняет вычитание (SRC) из (DST)   но разность не помещает в DST и по результату операции воздействует на флаги.

 

 условие флаги

OF SF ZF CF

DST > SRC 0/1 0 0 0

DST = SRC 0 0 1 0

DST < SRC 0/1 1 0 1

0/1 - означает, что флаг может быть равен 0 или 1 в зависимости от значений операндов. Флаги OF и SF имеют смысл при операциях со знаковыми числами, CF для беззнаковых чисел. Флаг переполнения OF устанавливается в 1, если в результате операции сложения или вычитания значения переноса в старшиий двоичный разряд и из старшего двоичного разряда не совпадают. По другому определению OF принимает значение 1, если результат превышает диапазон представления соответствующих чисел. Пусть DST > SRC и оба являются однобайтовыми числами, тогда:

 

DST:  1. (+127) 2. (+127)

SRC: - (+2) - (-2)

------- -------

(+125) (OF)=0 (+129)? (OF)=1

Во втором примере результат превышает диапазон: -128 <= x < = +127. Флаг знака SF устанавливается в '1', если старший бит результата операции равен 1, т.е. при отрицательном результате. В противном случае сбрасывается. Флаг нуля ZF устанавливается в '1' при нулевом результате (!), иначе сбрасывается. Флаг переноса CF = 1, если есть перенос из старшего разряда при сложении или есть заем в младший разряд при вычитании. Иначе флаг сбрасывается. Для первого примера SF = ZF = CF = 0, для второго: SF = 1, ZF = CF = 0.

ЛОГИЧЕСКИЕ КОМАНДЫ И КОМАНДЫ СДВИГА

1. AND DST, SRC; поразрядное логическое "И".

  mov dh, 10101100b;

  and dh, 0f0h;

в результате выполнения этих двух команд содержимое DH станет равно 10100000b.

2. OR DST, SRC; поразрядное логическое "ИЛИ".

 

or bx,dx;если (BX)=5F0Fh,а (DX)=7777h,то после операции

;(BX)=7F7Fh.

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 или JNBE NAME; условный переход, если, например, в результате сравнения CMP DST, SRC приемник по абсолютной величине больше источника, то перейти к метке name.

5. JB NAME или JNAE NAME; условный переход, если, например, в результате сравнения CMP DST, SRC приемник по абсолютной величине меньше источника, то перейти к метке name (команды п4 и п5 выполняются по результатам выполнения операций над беззнаковыми числами).

6. JZ NAME или JE NAME; перейти, если результат операции влияющей на флаг нуля - нулевой (переход по "нулю").

7. JNZ NAME или JNE NAME; переход по "не нулю". (команды п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 9.3.9 КОМАНДЫ ОБРАБОТКИ СТРОК (ЦЕПОЧЕК БАЙТОВ)

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

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

Устройство Возможные состояния
Математический сопроцессор Присутствует, отсутствует
Максимальное количество подключаемых Сом портов От 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.


Информация о работе «Разработка программы на Ассемблере»
Раздел: Информатика, программирование
Количество знаков с пробелами: 91958
Количество таблиц: 12
Количество изображений: 0

Похожие работы

Скачать
32352
1
3

... как единое целое. Результатом вычисления выражения может быть адрес некоторой ячейки памяти или некоторое константное (абсолютное) значение. В табл. 2.2 приведены поддерживаемые языком ассемблера операторы и перечислены их приоритеты. Арифметические операторы. К ним относятся унарные операторы «+» и «-», бинарные «+» и «-», операторы умножения «*», целочисленного деления «/», получения остатка ...

Скачать
135709
1
0

... ) ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ И ПРИБОРОСТРОЕНИЯ КАФЕДРА КЭС группа Э-92 ДАТА ЗАЩИТЫ  апреля 1997 г. Отзыв на дипломную работу студента гр.Э-92 Сорокина Ю.В. “Разработка программы контроллера автоматически связываемых объектов для управления конструкторской документацией в среде Windows 95/NT”. Широкое использование вычислительной техники в народном хозяйстве требует увеличения производства и ...

Скачать
73273
4
16

... выбрать имя в ListBox’e и нажать кнопку «OK», после чего выбранное имя автоматически отобразиться в окне получателя сообщения. Рис. 1.10. Выбор адресата получателя   Поиск компьютеров в локальной сети Приведём пример кода программы, реализующую поиск компьютеров в локальной сети Microsoft. procedure TForm4. Button1Click (Sender: TObject); var Q, BufferSize: DWord; R: THandle; Buf: ^ ...

Скачать
7954
1
1

... значения низкого порога температуры, высвечивается сообщение и остается до пор, пока температура не станет выше, сохраненного значения низкого порога температуры.   3. Разработка программы Для того чтобы нам реализовать программу, необходимо компьютером считывать сигналы. Считывать сигналы будем с помощью параллельного порта LPT1. Pin In/Out Signal Name Pin In/Out Signal ...

0 комментариев


Наверх