.

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

Язык: русский
Формат: реферат
Тип документа: Word Doc
73 2099
Скачать документ

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

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

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

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

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

тема

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

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

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

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

Бишкек 2001

СОДЕРЖАНИЕ

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

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

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

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

КОМАНДЫ ПЕРЕСЫЛКИ …………………………………………………11

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

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

КОМАНДЫ УПРАВЛЕНИЯ МИКРОПРОЦЕССОРОМ …………………18

ПРИМЕЧАНИЯ………………………………………………………………20

ОБЩИЙ РАЗДЕЛ…………………………………………………………21

Технико-математическое описание задачи……….………………….21

Требования к функциональным характеристикам…………………..23

Требования к техническим и программным средствам………….… 25

Обоснования выбора языка программирования……………………. 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-ной HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-cod.htm” \l “СИСТЕМЫ СЧИСЛЕНИЯ”
СС . К шестнадцатиричному числу добавляется слева ноль, если оно
начинается с буквы.

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

длина команды или число занимаемых ею байтов,

функциональное назначение и

способ адресации.

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

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

1) команды пересылки данных,

2) арифметические команды,

3) логические команды,

4) команды переходов и

5) команды управления.

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

регистровая,

непосредственная,

прямая,

косвенная и

стековая.

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

В первом случае операнд(ы) располагаются в HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “РОН” регистрах
микропроцессора (МП), например по команде MOV AX,CX пересылается
содержимое CX в AX.

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

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

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

Стековая адресация производится к операндам расположенным в области
памяти, называемой HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “СТЕК” стек .

 

НЕКОТОРЫЕ ОПЕРАТОРЫ, ПРЕДОПРЕДЕЛЁННЫЕ ИМЕНА, ДИРЕКТИВЫ И КОМАНДЫ  
АССЕМБЛЕРА 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 – эти имена во время трансляции
заменяются, соответственно на текущие дату, время и имя файла в формате
HYPERLINK “http://de.ifmo.ru/library/electron/cpu-cod.htm” \l “ASCII”
ASCII .

 

ОПЕРАТОРЫ

 

1. () – скобки, определяют порядок вычислений

2. [] – например [BX] означает содержимое ячейки памяти с адресом в
регистре bx. Признак HYPERLINK
“http://de.ifmo.ru/library/electron/assembl.htm” \l “Косвенная
адресация” косвенной адресации .

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 – операции HYPERLINK
“http://de.ifmo.ru/library/electron/cif-obu.htm” \l “”И” (AND)”
“И”,”ИЛИ”,”ИСКЛ.ИЛИ” .

    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), а
пересылка в комментарии будет обозначаться знаком
FF, то адрес порта указывается HYPERLINK
“http://de.ifmo.ru/library/electron/assembl.htm” \l “Косвенная
адресация” косвенно , через содержимое регистра DX ( HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “специальные
функции” специальная функция регистра общего назначения).

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 HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “эффективный адрес
(смещение)” эффективный адрес (смещение) ячейки памяти с символическим
адресом M.

lea di, rus; аналог этой команды – mov di, HYPERLINK
“http://de.ifmo.ru/library/electron/assembl.htm” \l “OFFSET” 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) SRC 0/1 0 0 0

DST = SRC 0 0 1 0

DST SRC и оба
являются однобайтовыми числами, тогда:

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

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

——- ——-

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

Во втором примере результат превышает диапазон: -128 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 выполняются по результатам
выполнения операций над HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-cod.htm” \l “Беззнаковые числа:”
беззнаковыми числами) .

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

7. JNZ NAME или JNE NAME; переход по “не нулю”. (команды п6 и п7
выполняются по результатам выполнения операций над HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-cod.htm” \l “Числа со знаком”
числами 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; сбросить HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “РЕГИСТР ФЛАГОВ”
флаг переноса (CF) = 0.

2. STC; установить флаг переноса (CF) = 1.

3. CMC; инвертировать флаг пнреноса.

4. CLD; очистить флаг направления (DF) = 0, в этом случае HYPERLINK
“http://de.ifmo.ru/library/electron/assembl.htm” \l “CLD” операции над
строками (цепочками байтов) будут производиться от младшего адреса к
старшему.

5. STD; установить флаг направления (DF) = 1,обработка цепочек байтов
производится от старшего адреса к младшему.

6. STI; установить флаг HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “ВВОД-ВЫВОД ПО
ПРЕРЫВАНИЯЮ” прерываний (IF) = 1, разрешить прерывания от внешних
устройств.

7.CLI; очистить флаг прерываний.

8. NOP; холостая операция.

 

КОМАНДЫ ПРЕРЫВАНИЙ

 

1. INT INUM; эта команда вызывает HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “программное
прерывание” программное прерывание , то есть переход к ячейке памяти с
адресом хранящимся в четырех байтах, начиная с адреса 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; HYPERLINK
“http://de.ifmo.ru/library/electron/cpu-obu.htm” \l “специальные
функции” специальная функция регистра 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.

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 – Выход

Ваш выбор ? :

рис. 3

Для того, чтобы получить краткие сведения о вашем ПК – нажмите клавишу
«1», затем «Enter» на вашей клавиатуре, и на экран высветится список
устройств с текущем состоянием. Для возврата в меню нажмите любую
клавишу.

Для того, чтобы протестировать оперативную память вашего ПК – нажмите
клавишу, «2» затем «Enter» на вашей клавиатуре, и на экране высветится
сообщение о состоянии памяти вашего ПК. Для возврата в меню нажмите
любую клавишу.

Для того, чтобы выйти из программы – нажмите клавишу «3», затем «Enter»
на вашей клавиатуре.

2.6. Заключение о результатах проектируемой задачи

В ходе выполнения поставленной в курсовом проекте задачи были
приобретены навыки реализации сложных ассемблерных программ с
использованием макросов и процедур. Кроме того, был получен огромный
опыт и умение работы с CMOS (область памяти, где хранятся сведения о
конфигурации ПК) на низком уровне, т.е. с использованием прерывания BIOS
11h и 70h порта, а также опыт использования дополнительных сегментных
регистров и регистров модификаторов.

Реализованная программа может быть полезна при диагностике оборудования
на относительно старых моделях ПК, поскольку в программе используется
система команд 8086 процессора, который был выпущен в 1979 г.
корпорацией Intel, и сейчас эта модель процессора является устаревшей.

Приложение № 1

7.1 СИСТЕМЫ СЧИСЛЕНИЯ

Любое неотрицательное число в позиционной системе счисления (СС) может
быть представлено в виде:

                    

D = Cn-1*bn-1 + Cn-2*bn-2 + … + C1*b1 + C0*b0 + C-1*b-1 + C-2*b-2
+..,     

где D – десятичный эквивалент числа, Ci – значение i-го разряда, b –
основание системы счисления,b в степени i – вес i-го разряда и n число
разрядов целой части числа. В вычислительной технике ниболее
распространены: двоичная (BIN), десятичная (DEC), шестнадцатиричная
(HEX) и непозиционная двоично-десятичная (BCD) системы счисления. В BCD
системе вес каждого разряда равен степени 10, как в десятичной системе,
а каждая цифра i-го разряда кодируется 4-мя двоичными цифрами.
Восьмиричная СС (OCT) применяется реже. Первые 16 чисел представлены в
таблице 1.

Двоичное число 10010011 = 1 * 2^7 + 1 * 2^4 + 1 * 2^1 + 1 * 2^0 = 147
(DEC). Для перевода числа из двоичной системы в 16 – ную, его необходимо
разбить начиная справа на группы по 4 двоичных цифры и каждую группу
представить 16 – ной цифрой из таблицы. Для обратного перевода каждая
HEX цифра заменяется четверкой двоичных, незначащие нули слева отб-
расываются. Двоично-десятичное число можно записывать и десятичными
цифрами, например 1997, и двоичными – 0001 1001 1001 0111. Каждое
десятичное число можно представить в виде BCD, например 19(DEC) =
19(BCD), но их двоичные представления не равны: 19(DEC) = 10011(BIN), а
19(BCD) = 1 1001(BIN). Не каждая запись из нулей и единиц имеет
двоично-десятичный эквивалент. Например, 11001001(BIN)  = ?(BCD) =
C9(HEX) = 201(DEC), т.к. десятичной цифры 12 = 1100 несуществует!

 

7.2 МАШИННОЕ ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ

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

     

Далее следуют – тетрада (4 бита), байт ( byte 8 бит), двойное слово
(DoubleWord 16 бит) или длинное (LongWord 16 бит) и учетверенное слова.
Младший бит обычно занимает крайнюю правую позицию.

 

7.3 ЧИСЛА С ФИКСИРОВАННОЙ ТОЧКОЙ

 

Такие числа могут быть как целыми, так и дробными. Точка мысленно
фиксируется рядом с любым разрядом. Если она располагается справа от
младшего бита, то число целое, если слева от старшего – число дробное.
Далее будут рассматриваться только целые числа с фиксированной точкой,
для нецелых чисел чаще применяется показательная форма, о которой пойдет
речь дальше.

Естественным представлением целого неотрицательного числа является
двоичная система счисления. Кодирование отрицательных чисел производится
тремя наиболее употребительными способами, в каждом из которых крайний
левый бит – знаковый. Отрицательному числу соответствует единичный бит,
а положительному – нулевой. Каждый способ оценивается по скорости и
затратам на выполнение сложения и изменения знака числа, т.к. вычитание
есть сложение с измененным знаком одного операнда.

1.Прямой код. Изменение знака производится просто, путем инверсии бита
знака. Пусть 00001001 = 9, тогда 10001001 = -9. Если при сложении двух
чисел в этом коде знаки совпадают, то трудностей нет. Если знаки
различаются необходимо найти наибольшее число, вычесть из него меньшее,
а результату присвоить знак наибольшего слагаемого.

2.Обратный код, инверсный или дополнительный “до 1”. Изменение знака
производится просто – инверсией всех бит: 00001001 = 9, а 11110110 = -9.
Сложение также выполняется просто, т.к. знаковые биты можно складывать.
При переносе единицы из левого (старшего) бита, она должна складываться
с правым (младшим). Например: 7 + (-5) = 2.

00000111 = 7

11111010 =-5 (инверсия 00000101 = 5)

1 00000001

1

00000010 = 2

Сложение в обратном коде происходит быстрее, т.к. не требуется принятие
решения, как в предыдущем случае. Однако суммирование бита переноса
требует дополнительных действий. Другим недостатком этого кода является
представление нуля двумя способами, т.к. инверсия 0…00 равна 1. ..11 и
сумма двух разных по знаку, но равных по значению чисел дает
1…11.Например: (00001001 = 9) + (11110110 = -9) = 11111111. Кстати, из
этого примера понятно почему код называется дополнительным “до 1”. Этих
недостатков лишен —

3.Дополнительный или дополнительный “до 2” код. Число с противоположным
знаком находится инверсией исходного и добавлением к результату единицы.
Например, найти код числа -9.

00001001 = 9 11110111 =-9

11110110 – инверсия 00001000 – инверсия

1 1

11110111 =-9 00001001 = 9

Проблемы двух нулей нет. +0 = 00000000, -0 = 11111111 + 1 = 00000000
(перенос из старшего бита не учитывается).Сложение производится по
обычным для неотрицательных чисел правилам.

00001001 = 9

11110111 =-9

1 00000000

Из этого примера видно, что в каждом разряде двух равных по модулю чисел
складываются две единицы, что и определило название способа. Этот метод
применяется наиболее часто, и когда говорят о дополнительном коде, то
имеется в виду дополнительный “до 2-х” код.

 

7.4 ДИАПАЗОН ЦЕЛЫХ ЧИСЕЛ С ФИКСИРОВАННОЙ ТОЧКОЙ

 

Беззнаковые числа: 0 +128 (или -127 ???)

/ / :

0 1 :

Перенос в бит D7 равен 1, а из бита D7 = 0, в результате сложения чисел
(OF) = 1, (CF) = 0, (ZF) = 0, (SF) = 1, (PF) = 0, (AF) = 1. Остальные
три флага будут рассмотрены далее. Содержимое регистра признаков
называется также словом состояния процессора(программы) и обозначается
PSW.

 

ОРГАНИЗАЦИЯ ПАМЯТИ И ВЫЧИСЛЕНИЕ АДРЕСА

 

МП 8086 имеет 20-ти разрядную HYPERLINK
“http://de.ifmo.ru/library/electron/zu-obu.htm” \l “ШИНА” шину адреса
ША, позволяющую обращаться к 2^20 или примерно к одному миллиону ячеек
памяти. 16-ти битовая шина данных ШД может пересылть информацию байтами
или словами. Память обычно организована в виде HYPERLINK
“http://de.ifmo.ru/library/electron/zu-obu.htm” \l “ЭПj” линейного
одномерного массива байтов , причем два соседних байта могут
рассматриваться как слово. Все мегабайтное пространство памяти условно
делится на 16 сегментов объемом по 64Kb. Микропроцессору доступны в
каждый момент четыре – кодовый сегмент, где хранится программа,
HYPERLINK “http://de.ifmo.ru/library/electron/” \l “СТЕК” стековый
сегмент, сегмент данных программы и дополнительный сегмент данных.
Начальные адреса этих сегментов хранятся в регистрах CS,SS,DS и ES. Так
как эти регистры 16-ти битовые, а все адресное пространство 20-ти
битовое, то МП начальный сегментный адрес в 20-ти битовом сумматоре
HYPERLINK “http://de.ifmo.ru/library/electron/trigg-RG.htm” \l “деления
и умножения двоичных чисел на 2^n” сдвигает на четыре бита влево
(эквивалентно умножению на 16) и складывает с содержимым одного из
регистров (IP,SP,DI,SI).

Полученное число называется физическим адресом. Например, извлекая из
памяти очередной байт кода программы МП формирует физический адрес по
формуле: Физический адрес = (IP) + (CS) * 16, где (IP) – смещение,
эффективный или исполнительный адрес, (CS) – сегментный адрес, а (CS) *
16 – называется начальным сегментным адресом. Организация памяти
приведена на рис.2.

 

8.4 ПРОЦЕССОРНЫЙ БЛОК (ПБ )

 

включает микропроцессор, стабилизируемый кварцем генератор импульсов,
два устройства для формирования адресных и управляющих сигналов и
двунаправленный буфер шины данных. Схема ПБ представлена на рис.3. Для
уменьшения общего количества выводов МП, по некоторым из них в разные
моменты передаются разные сигналы, поэтому младшие 16 линий адреса и
шина данных совмещены (мультиплексированы).

Конденсатор C до включения питания разряжен. В начальный момент времени
t0 подается напряжение питания на выводы (+). Начиная с этого момента
времени на входе ~RES действует логический 0 до момента t1, когда
напряжение на конденсаторе C достигнет порогового значения логической 1.
В течение интервала t0..t1 выходной сигнал RESET имеет активный уровень
лог.1. Микропроцессор переводится в исходное состояние. При этом в
регистр CS записывается код FFFFh, а в регистр IP код 0000h.

Когда C зарядится и сигнал ~RES станет “1”, на входе RESET
микропроцессора сигнал снизится до пассивного уровня. Начинается
основной цикл работы. МП извлекает из ячейки памяти с адресом FFFF:0000
первый байт команды, который чаще всего является кодом безусловного
перехода к тому месту в памяти, где находится начало программы. В
процессе работы можно перезапустить МП с помощью кнопки SW. Конденсатор
C разряжается до нуля и процесс запуска повторяется. МП может работать в
двух режимах в максимальном и минимальном. Минимальный режим
ограничивает адресуемый объем памяти до 64Kb. В большинстве приложений в
приборостроении такого объема достаточно, поэтому сигнал ~MX/MN = 1.
Формирователи сигналов ШУ,ША и ШД (шины управления адреса и данных),
выполнены на элементах ИЛИ, регистрах и шинных формирователях и служат
также для увеличения мощности этих сигналов.

Генератор G формирует последовательность импульсов CLK, называемых
тактовыми. Выполнение команды производится в течение интервалов времени,
называемых циклами. Если в цикле есть обращение к памяти или к внешним
устройствам, то он называется циклом шины. Цикл шины содержит 4
обязательных такта T1 … T4.

В такте T1 микропроцессор передает по совмещенной шине адрес/данные
адрес ячейки памяти или внешнего устройства (ВУ), подключенного к шинам
ШУ,ША и ШД. В такте T2 производится выбор направления обмена данными с
памятью или ВУ, а в тактах T3,T4 – передача данных. Если ЗУ
(запоминающее устройство) или ВУ медленные, то на вход готовности RDY
посылается   сигнал RDY = 0, по которому МП вставляет циклы ожидания TW,
до тех пор, пока не будет установлена готовность ВУ или ЗУ (RDY = 1).
Если в цикле нет обращения к шине, то МП формирует холостые циклы TI.

Для разделения сигналов совмещенной шины адрес/данные ШАД(AD15..0) их
необходимо “демультиплексировать” с помощью HYPERLINK
“http://de.ifmo.ru/library/electron/trigg-RG.htm” \l “D – ТРИГГЕР”
регистра защелки адреса RG и двунаправленного HYPERLINK
“http://de.ifmo.ru/library/electron/” \l “буфер” буфера BD. При
обращении к памяти (в том числе при выборке команды) микропроцессор
передает по ШАД адрес ячейки памяти. Этот адрес записывается в
D-триггеры HYPERLINK “http://de.ifmo.ru/library/electron/trigg-RG.htm”
\l “РЕГИСТРЫ” регистра RG сигналом ALE генерируемым микрпроцессором в
этот момент и поступающим на синхровходы D-триггеров. Адрес в регистре
сохраняется на время последующей передачи данных. Следом по ШАД
передаются, либо данные от микропроцессора к ВУ или ЗУ, либо в обратном
направлении. МП должен, во-первых, обеспечить правильное направление
передачи HYPERLINK “http://de.ifmo.ru/library/electron/” \l “буфер”
буфера BD и , во-вторых, открыть (разрешить) HYPERLINK
“http://de.ifmo.ru/library/electron/cif-obu.htm” \l “ТРИСТАБИЛЬНЫЕ
ЭЛЕМЕНТЫ” тристабильные элементы буфера для передачи данных. Первую
задачу решает сигнал МП ~DT/R (~DT/R=0 передача данных от МП – Transmit,
~DT/R=1 прием данных МП – Receive).

Вторая задача решается генерацией МП сигнала ~DEN (Data Enable). Чтение
или ввод данных в один из регистров МП осуществляется с помощью
инверсных сигналов шины управления (ШУ):  ~MEMR (чтение из памяти),~IOR
(ввод из ВУ), называемыми еще стробами чтения. Запись или вывод данных
из МП по шине данных сопровождается стробами записи ~MEMW (запись в
память (ЗУ)), или ~IOW (вывод во внешнее устройство (ВУ)). Четверка
стробов, которые являются основными сигналами шины управления,
формируется из сигналов чтения, записи (~RD,~WR) и сигнала M/~IO,
определяющего к чему производится обращение : к ЗУ или ВУ. Формирование
этих сигналов производится с помощью простой комбинационной схемы,
содержащей 4 элемента ИЛИ и один инвертор.

 

8.5 МИКРОПРОЦЕССОРНАЯ СИСТЕМА С ТРЕМЯ ШИНАМИ

 

Работой всех устройств подключаемых к HYPERLINK
“http://de.ifmo.ru/library/electron/” \l “ПРОЦЕССОРНЫЙ БЛОК (ПБ )”
процессорному блоку управляет HYPERLINK
“http://de.ifmo.ru/library/electron/kombin.htm” \l “ДЕШИФРАТОР”
дешифратор DC, к входам которого подводятся линии шины адреса. Обычно
дешифраторов бывает несколько. Если используется не все адресное
пространство для памяти и ВУ, то на дешифратор заводятся не все линии
адреса, чаще всего несколько старших разрядов ША. Например, если на DC
завести 4 линии A19..A16, то все адресное пространство будет разбито на
неперекрывающиеся блоки по 2^20 / 2^4 = 64Кб, принадлежащие каждому из
16-ти (2^4 = 16) устройств ЗУ или ВУ, подключенных к шинам (на рис.4
показаны 7 устройств). Часть из них могут использовать все отводимое им
адресное пространство, например HYPERLINK
“http://de.ifmo.ru/library/electron/zu-obu.htm” \l “ПЗУ” ПЗУ и
HYPERLINK “http://de.ifmo.ru/library/electron/zu-obu.htm” \l “ОЗУ” ОЗУ
, другие только несколько адресов.

Типовая МПС, показанная на схеме содержит:

микросхему программируемого периферийного интерфейса ППИ (PPI или IOP),
к которой через три 8-битовых независимых канала PA,PB и PC можно
подключать периферийные устройства, например принтер, клавиатуру, 8-ми
сегментный дисплей или HYPERLINK
“http://de.ifmo.ru/library/electron/addatest.htm” \l “ЦАП И АЦП” ЦАП и
АЦП . Через ППИ может производиться обмен данными с другими МПС или ЭВМ.

Ввод с клавиатуры и вывод на дисплей могут производиться специальными
микросхемами.

Связь с удаленными устройствами или абонентами сетей может
осуществляться с помощью универсального асинхронного последовательного
приемо-передатчика УАПП-UART (программируемый связной интерфейс ПСИ-PCI
или IOS). К выводам RxD – приемник и TxD – передатчик через линию связи
подключаются передатчик и приемник другого абонента или устройства. Если
связь производится через модем, то доступны любые сети.

Для формирования точных, различных по частоте и длительности сигналов, в
т.ч. и звукового диапазона используется программируемый интервальный
таймер ПИТ-PIT, имеющий три независимых 16-ти разрядных двоичных
счетчика. Задержка, длительность или частота выходного сигнала каждого
счетчика кратна 3..65535 периодам входного сигнала.

Если в системе используется режим прерывания выполнения основной
программы внешними устройствами, требующими безотлагательного
вмешательства микропроцессора, то может применяться программируемый
контроллер прерываний ПКП – PIC (устройство собирающее заявки на
обслуживание от ВУ с входов IRi). Подробно прерывания будут рассмотрены
ниже.

Обмен данными между МП и ЗУ или одним из ВУ возможен только при
появлении на выходе дешифратора DC единственного сигнала ~CS = 0,
поступающего на то устройство с которым будет производиться запись или
чтение байта данных. Остальные (невыбранные) устройства будут в
пассивном состоянии, т.к. их сигналы ~CS = 1. Байт информации на ШД
считывается ВУ, ЗУ или МП в строго ограниченном интервале времени во
время действия одного из управляющих сигналов чтения/записи (~MEMR,
~MEMW) из памяти или в память, или во время действия одного из сигналов
управления вводом/выводом (~IOR, ~IOW) в/из ВУ.

Быстрый обмен данными может производиться с помощью устройства прямого
доступа к памяти ПДП (DMA).

 

8.6 СТЕК

Область памяти с упрощенной схемой адресации, к которой МП обращается по
принципу “последним вошел – первым вышел” (LIFO). Байты программы в
оперативной памяти располагаются последовательно по нарастающим адресам.
Стек заполняется по последовательно убывающим адресам. Во избежание
перекрытия этих двух областей памяти стек обычно располагается в старших
адресах. Начальный адрес стека, называемый дном (bottom) записывается в
регистр SP командой MOV SP,0fffeh. Вместо 0fffeh – адрес предпоследнего
байта сегмента, может быть другое значение, но выравненное по
двухбайтовым, т. е. четным адресам. Текущее значение содержимого SP
называется, также адресом вершины стека (top). Если адрес вершины
совпадает с адресом дна – стек считается пустым. Рассмотрим механизм
помещения в стек и извлечения из него данных на примере команд PUSH AX и
POP BX. Пусть начальное значение аккумулятора AX равно 874c.

Команда PUSH выполняется в четыре этапа:

Адрес в SP уменьшается на 1: (SP)

Нашли опечатку? Выделите и нажмите CTRL+Enter

Похожие документы
Обсуждение

Ответить

Курсовые, Дипломы, Рефераты на заказ в кратчайшие сроки
Заказать реферат!
UkrReferat.com. Всі права захищені. 2000-2020