Основы микропроцессорной техники

Автор работы: Пользователь скрыл имя, 17 Января 2012 в 13:41, курсовая работа

Краткое описание

Операционная система, сокр. ОС (англ. operating system) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны — предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений. Это определение применимо к большинству современных ОС общего назначения.

Прикрепленные файлы: 1 файл

Отчет ОМТ.docx

— 74.67 Кб (Скачать документ)
  • длина команды или число занимаемых ею байтов,
  • функциональное назначение и
  • способ адресации.

   Для МП 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. Стековая адресация производится к операндам расположенным в области памяти, называемой стек.

Предопределенные  имена.

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. 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 =|

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 может быть ячейкой памяти. 

   2. СПЕЦИАЛЬНАЯ ЧАСТЬ

   2.1. Постановка  задачи

   Написать  программу, которая вычисляет следующее арифметическое выражение: a/b+c*d/(c+b). В программе использовать тип p-строки, первые 2 байта которые хранят информацию о её длине.

   2.2. Текст программы

<p>

 .model    small

.386                        ; используется адресация по базе с помощью AX, DX и т. д.

 .stack    1000h

 .data

 

a    DW    ?                    ; операнды вычисления

b    DW    ?

c    DW    ?

d    DW    ?

 

msg1    DB    71,0,"Vychislenie: a/b+c*d/(c+b)",10,13

 DB    "Vvedite a, b, c, d, razdeliteli - [ENTER]",10,13,"    "

div_zer    DB    14,0,"Delenie na 0",10,13        ; сообщение об ошибке

answer    DB    11,0,"Rezul'tat: "

 

str_c    DB    4,0, 4 DUP(?)                ; буфер p-строки вывода

 

 .code

Информация о работе Основы микропроцессорной техники