Скачиваний:
68
Добавлен:
11.10.2021
Размер:
517.15 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

СИСТЕМА КОМАНД МИКРОПРОЦЕССОРОВ СЕМЕЙСТВА INTEL

NCS-51

Отчет по лабораторной работе №2

по дисциплине «Организация ЭВМ и вычислительных систем»

Студенты гр.

6.11.2020

Приняла Доцент кафедры КИБЭВС

_______

6.11.2020

Томск 2020

2

1 Введение Цель работы: изучение принципов работы и системы команд

микропроцессора на примере микропроцессоров семейства Intel mcs-51.

Используя систему команд процессора 8051, составить алгоритм и написать программу циклического перебора значения от 0 до 100

включительно. Нечетные значения выводить в порт P0, четные в P1. Оценить период выполнения цикла. Проверить правильность работы программы на симуляторе (Вариант 4).

3

2 Ход работы

2.1. Основные теоретические сведения

Система команд МП MCS - 51 включает в себя 111 команд. Большинство команд выполняются за один или два машинных цикла «выборка-

исполнение», за исключением команд умножения и деления, которые выполняются за четыре машинных цикла. В качестве операндов команд микропроцессора могут использоваться биты, четырехбитные цифры (ниблы),

байты и двухбайтные слова.

По функциональным признакам команды разделяются на пять групп:

пересылки данных;

арифметических операций;

логических операций;

операций над битами;

управления аппаратно-программными средствами МП.

Как показано в таблице 1, по команде MOV выполняется пересылка данных из второго операнда в первый. Эта команда не имеет доступа ни к внешней памяти данных, ни к памяти программ. Для этих целей используются команды M0VX и MOVC соответственно. Первая из них обеспечивает чтение/запись байта из внешней памяти данных, вторая - чтение байта из памяти программ.

Таблица 1 – команды пересылки

Название команды

 

Мнемокод

 

КОП

Б

Ц

Операция

Пересылка

 

в

MOV A, Rn

 

1110.1rrr

1

1

(A)<-(Rn)

аккумулятор

 

из

 

 

 

 

 

 

регистра (n=0+7)

 

 

 

 

 

 

 

Пересылка

 

в

MOV A, ad

 

1110.0101

2

1

(A)<-(ad)

аккумулятор

прямо-

 

 

 

 

 

 

адресуемого байта

 

 

 

 

 

 

 

Пересылка

 

в

MOV A, @Ri

1110.011i

1

1

(A)<-((Ri))

аккумулятор

байта

из

 

 

 

 

 

 

РПД (i=0,1)

 

 

 

 

 

 

 

 

Загрузка в аккумулятор

MOV

A,

0111.0100

2

1

(A)<-#data8

константы

 

 

#data8

 

 

 

 

 

4

Пересылка в регистр из

MOV Rn, A

1111.1rrr

1

1

(Rn)<-(A)

аккумулятора

 

 

 

 

 

 

 

 

 

Пересылка

в

 

регистр

MOV Rn, ad

1010.1rrr

2

2

(Rn)<-(ad)

прямоадресуемого

 

 

 

 

 

 

 

байта

 

 

 

 

 

 

 

 

 

 

 

Загрузка

 

в

 

регистр

MOV

Rn,

0111.1rrr

2

1

(Rn)<-#data8

константы

 

 

 

 

#data8

 

 

 

 

 

Пересылка по прямому

MOV ad, A

1111.0101

2

1

(ad)<-(A)

адресу аккумулятора

 

 

 

 

 

 

 

Пересылка по прямому

MOV ad, Rn

1000.1rrr

2

2

(ad)<-(Rn)

адресу регистра

 

 

 

 

 

 

 

 

Пересылка

 

 

 

 

MOV add, ads

1000.0101

3

2

(add)<-(ads)

прямоадресуемого

 

 

 

 

 

 

 

байта

по

 

прямому

 

 

 

 

 

 

адресу

 

 

 

 

 

 

 

 

 

 

 

Пересылка

байта

из

MOV ad, @Ri

1000.011i

2

2

(ad)<-((Ri))

РПД по прямому адресу

 

 

 

 

 

 

Пересылка по прямому

MOV

ad,

0111.0101

3

2

(ad)<-#data8

адресу константы

 

#data8

 

 

 

 

 

Пересылка

в

РПД

из

MOV @Ri, A

1111.011i

1

1

((Ri))<-(A)

аккумулятора

 

 

 

 

 

 

 

 

 

Пересылка

 

в

РПД

MOV @Ri, ad

0110.011i

2

2

((Ri))<-(ad)

прямоадресуемого

 

 

 

 

 

 

 

байта

 

 

 

 

 

 

 

 

 

 

 

Пересылка

 

в

РПД

MOV

@Ri,

0111.011i

2

1

((Ri))<-#data8

константы

 

 

 

 

#data8

 

 

 

 

 

Загрузка

 

 

указателя

MOV DPTR,

1001.0000

3

2

(DPTR)<-

данных

 

 

 

 

 

#data16

 

 

 

 

#data16

Пересылка

 

 

 

в

MOVC

A,

1001.0011

1

2

A<-((A)

аккумулятор

байта

из

@A+DPTR

 

 

 

+(DPTR))

ПП

 

 

 

 

 

 

 

 

 

 

 

Пересылка

 

 

 

в

MOVC

A,

1000.0011

1

2

(PC)<-(PC)+1,

аккумулятор

байта

из

@A+PC

 

 

 

 

(A)<-

ПП

 

 

 

 

 

 

 

 

 

 

((A)+(PC))

Пересылка

 

 

 

в

MOVX

A,

1110.001i

1

2

(A)<-((Ri))

аккумулятор

байта

из

@Ri

 

 

 

 

 

памяти данных

 

 

 

 

 

 

 

 

Пересылка

 

 

 

в

MOVXA,

1110.0000

1

2

(A)<-

аккумулятор

байта

из

@DPTR

 

 

 

 

((DPTR))

расширенной

 

памяти

 

 

 

 

 

 

данных

 

 

 

 

 

 

 

 

 

 

 

Пересылка

в

память

MOVX

@Ri,

1111.001i

1

2

((Ri))<-(A)

данных

значение

из

A

 

 

 

 

 

аккумулятора

 

 

 

 

 

 

 

 

 

5

Пересылка

 

в

MOVX

 

1111.0000

1

2

((DPTR))<-(A)

расширенную

память

@DPTR, A

 

 

 

 

 

данных

значение

из

 

 

 

 

 

 

аккумулятора

 

 

 

 

 

 

 

 

Загрузка в стек

 

 

PUSH ad

 

1100.0000

2

2

(SP)<-(SP) + 1,

 

 

 

 

 

 

 

 

 

((SP))<-(ad)

Извлечение из стека

 

POP ad

 

1101.0000

2

2

(ad)<-(SP),

 

 

 

 

 

 

 

 

 

(SP)<-(SP) – 1

Обмен

аккумулятора

с

XCH A, Rn

 

1100.1rrr

1

1

(A)<->(Rn)

регистром

 

 

 

 

 

 

 

 

Обмен

аккумулятора

с

XCH A, ad

 

1100.0101

2

1

(A)<->(ad)

прямоадресуемым

 

 

 

 

 

 

 

байтом

 

 

 

 

 

 

 

 

 

Обмен

аккумулятора

с

XCH A, @Ri

1100.011i

1

1

(A)<->((Ri))

байтом

из

памяти

 

 

 

 

 

 

данных

 

 

 

 

 

 

 

 

 

Обмен младших тетрад

XCHD

A,

1101.011i

1

1

(A0…A3)<-

аккумулятора и памяти

@Ri

 

 

 

 

>W(Ri0…Ri3)

данных

 

 

 

 

 

 

 

 

 

Команды ХСН производят обмен данных, а команды PUSH и POP

предназначены для записи данных в стек и их чтение. Размер стека ограничен размером памяти данных.

Группа команд пересылок микроконтроллера имеет следующую особенность - в ней нет специальных команд для работы со специальными регистрами: PSW, таймером, портами ввода-вывода. Доступ к ним, как и к другим регистрам специальных функций, осуществляется заданием соответствующего прямого адреса, т.е. это команды обычных пересылок, в

которых вместо адреса можно ставить название соответствующего регистра.

Регистр-аккумулятор имеет два различных имени в зависимости от способа адресации: А - при неявной адресации (например, MOV A, R0) и АСС

- при использовании прямого адреса.

Таблица 2 – команды арифметических операций

Название команды

 

Мнемокод

КОП

Б

Ц

Операция

Сложение

 

ADD A, Rn

0010.1rrr

1

1

(A)<-(A) + (Rn)

аккумулятора

с

 

 

 

 

 

регистром (n= 0…7)

 

 

 

 

 

 

6

Сложение

 

ADD A, ad

 

0010.0101

2

1

(A)<-(A) + (ad)

аккумулятора с прямо-

 

 

 

 

 

 

 

адресуемым байтом

 

 

 

 

 

 

 

Сложение

 

ADD A, @Ri

0010.011i

1

1

(A)<-(A)

+

аккумулятора с байтом

 

 

 

 

 

((Ri))

 

из памяти данных

 

 

 

 

 

 

 

(i = 0,1)

 

 

 

 

 

 

 

 

Сложение

 

ADD

A,

0010.0100

2

1

(A)<-(A)

+

аккумулятора

с

#data8

 

 

 

 

#data8

 

константой

 

 

 

 

 

 

 

 

Сложение

 

ADDC A, Rn

0011.1rrr

1

1

(A)<-(A) + (Rn)

аккумулятора

с

 

 

 

 

 

+ (C)

 

регистром и переносом

 

 

 

 

 

 

 

Сложение

 

ADDC A, ad

0011.0101

2

1

(A)<-(A) + (ad)

аккумулятора с прямо-

 

 

 

 

 

+ (C)

 

адресуемым

 

 

 

 

 

 

 

 

байтом и переносом

 

 

 

 

 

 

 

Сложение

 

ADDC

A,

0011.011i

1

1

(A)<-(A)

+

аккумулятора с байтом

@Ri

 

 

 

 

((Ri)) + (C)

из памяти данных и

 

 

 

 

 

 

 

переносом

 

 

 

 

 

 

 

 

Сложение

 

ADDC

A,

0011.0100

2

1

(A)<-(A)

+

аккумулятора

с

#data8

 

 

 

 

#data8 + (C)

константой и переносом

 

 

 

 

 

 

 

Десятичная

коррекция

DAA

 

1101.0100

1

1

Если

 

аккумулятора

 

 

 

 

 

 

(А0…A3)>9

 

 

 

 

 

 

 

или ((АС)=1),

 

 

 

 

 

 

 

то (А0…A3)<-

 

 

 

 

 

 

 

( А0…A3) + 6,

 

 

 

 

 

 

 

затем

если

 

 

 

 

 

 

 

(А4…A7)>9

 

 

 

 

 

 

 

или ((С)=1),

 

 

 

 

 

 

 

то (А4…A7) <-

 

 

 

 

 

 

 

(А4…A7) + 6

Вычитание

из

SUBB A, Rn

1001.1rrr

1

1

(А)<-(А) – (С)

аккумулятора

регистра

 

 

 

 

 

– (Rn)

 

и заёма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вычитание

из

SUBB A, ad

1001.0101

2

1

(А)<-(А) – (С)

аккумулятора

прямо-

 

 

 

 

 

– ((ad))

 

адресуемого байта

 

 

 

 

 

 

 

и заема

 

 

 

 

 

 

 

 

7

Вычитание

 

из

SUBB A, @Ri

1001.011i

1

1

(А)<-(А) – (С)

аккумулятора

байта

 

 

 

 

 

– ((Ri))

памяти данных и заема

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вычитание

 

из

SUBB

A,

1001.0100

2

1

(А)<-(А) – (С)

аккумулятора

 

 

data8

 

 

 

 

- #data8

константы и заема

 

 

 

 

 

 

 

Инкремент

 

 

INC A

 

0000.0100

1

1

(А)<-(А) + 1

аккумулятора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Инкремент регистра

 

INC Rn

 

0000.1rrr

1

1

(Rn)<-(Rn)+ 1

 

 

 

 

 

 

 

 

 

Инкремент

 

 

INC ad

 

0000.0101

2

1

(ad)<-(ad) + 1

прямоадресуемого

 

 

 

 

 

 

 

байта

 

 

 

 

 

 

 

 

Инкремент

байта

в

INC @Ri

 

0000.011i

1

1

((Ri))<-((Ri))+1

памяти данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Инкремент

указателя

INC DPTR

 

1010.0011

1

2

(DPTR)<-

данных

 

 

 

 

 

 

 

(DPTR) + 1

 

 

 

 

 

 

 

 

 

Декремент

 

 

DEC A

 

0001.0100

1

1

(A)<-(A)-1

аккумулятора

 

 

 

 

 

 

 

 

Декремент регистра

 

DEC Rn

 

0001.1rrr

1

1

(Rn)<-(Rn)-1

Декремент

 

 

DEC ad

 

0001.0101

2

1

(ad)<-(ad)-1

прямоадресуемого

 

 

 

 

 

 

 

байта

 

 

 

 

 

 

 

 

Декремент

байта

в

DEC @Ri

 

0001.011i

1

1

((Ri))<-((Ri))-1

памяти данных

 

 

 

 

 

 

 

Умножение

 

 

MUL AB

 

1010.0100

1

4

(B)(A)<-

аккумулятора

 

на

 

 

 

 

 

(A)*(B)

регистр В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Деление аккумулятора

DIV AB

 

1000.0100

1

4

(A).(B)<-

на регистр В

 

 

 

 

 

 

 

(A)/(B)

 

 

 

 

 

 

 

 

 

Втаблице 2 приведен список арифметических операций,

поддерживаемых микропроцессором. Можно заметить, что результат выполнения команд ADD, ADDC, SUBB, MUL и DIV отображается флагами регистра PSW. Флаг С (carry) устанавливается при переносе из разряда D7, т.

е. в случае, если результат не помещается в восемь разрядов; флаг АС

(advanced carry) устанавливается при переносе из разряда D3 в командах сложения и вычитания и служит для реализации десятичной арифметики. Этот признак используется командой DAA.

8

Флаг OV устанавливается при переносе из разряда D6, т. е. в случае, если результат не помещается в семь разрядов и восьмой не может быть интерпретирован как знаковый. Этот признак служит для организации обработки знаковых чисел.

Флаг Р устанавливается и сбрасывается аппаратно. Если число единичных бит в аккумуляторе нечетно, то Р = 1, в противном случае Р = 0.

Таблица 3 – команды логических операций

Название команды

Мнемокод

КОП

Б

Ц

Операция

Логическое

И

ANL A, Rn

0101.1rrr

1

1

(A)<-(A) AND

аккумулятора

и

 

 

 

 

(Rn)

регистра

 

 

 

 

 

 

Логическое

И

ANL A, ad

0101.0101

2

1

(A)<-(A) AND

аккумулятора

и

 

 

 

 

(ad)

прямоадресуемого

 

 

 

 

 

байта

 

 

 

 

 

 

Логическое

И

ANL A, @Ri

0101.011i

1

1

(A)<-

аккумулятора и байта

 

 

 

 

(A)AND((Ri))

из памяти данных

 

 

 

 

 

 

Логическое

И

ANL A, #data8

0101.0100

2

1

(A)<-(A) AND

аккумулятора

и

 

 

 

 

#data8

константы

 

 

 

 

 

 

Логическое

И

ANL ad, A

0101.0010

2

1

(ad)<-(ad)

прямоадресуемого

 

 

 

 

AND (A)

байта и аккумулятора

 

 

 

 

 

Логическое

И

ANL ad, #data8

0101.0011

3

2

(ad)<-(ad)

прямоадресуемого

 

 

 

 

AND #data8

байта и константы

 

 

 

 

 

Логическое

ИЛИ

ORLA, Rn

0100.1rrr

1

1

(A)<-(A) OR

аккумулятора

и

 

 

 

 

(Rn)

регистра

 

 

 

 

 

 

Логическое

ИЛИ

ORLA, ad

0100.0101

2

1

(A)<-(A) OR

аккумулятора

и

 

 

 

 

(ad)

прямоадресуемого

 

 

 

 

 

байта

 

 

 

 

 

 

Логическое

ИЛИ

ORLA, @Ri

0100.011i

1

1

(A)<-(A) OR

аккумулятора и байта

 

 

 

 

((Ri))

из памяти данных

 

 

 

 

 

 

Логическое

ИЛИ

ORL A, #data8

0100.0100

2

1

(A)<-(A) OR

аккумулятора

и

 

 

 

 

#data8

константы

 

 

 

 

 

 

9

Логическое

ИЛИ

ORL ad, A

0100.0010

2

1

(ad)<-(ad)

OR

прямоадресуемого

 

 

 

 

(A)

 

байта и аккумулятора

 

 

 

 

 

 

Логическое

ИЛИ

ORL ad, #data8

0100.0011

3

2

(ad)<-(ad)

OR

прямоадресуемого

 

 

 

 

#data8

 

байта и константы

 

 

 

 

 

 

Исключающее

ИЛИ

XRL A, Rn

0110.1rrr

1

1

(A)<-(A) XOR

аккумулятора

и

 

 

 

 

(Rn)

 

регистра

 

 

 

 

 

 

 

 

Исключающее

ИЛИ

XRL A, ad

0110.0101

2

1

(A)<-(A) XOR

аккумулятора

и

 

 

 

 

(ad)

 

прямоадресуемого

 

 

 

 

 

 

байта

 

 

 

 

 

 

 

 

Исключающее

ИЛИ

XRL A, @Ri

0110.0111

1

1

(A)<-(A) XOR

аккумулятора и байта

 

 

 

 

((Ri))

 

памяти данных

 

 

 

 

 

 

 

Исключающее

ИЛИ

XRL A, #data8

0110.0100

2

1

(A)<-(A) XOR

аккумулятора

и

 

 

 

 

#data8

 

константы

 

 

 

 

 

 

 

Исключающее

ИЛИ

XRL ad, A

0110.0010

2

1

(ad)<-(ad)

 

прямоадресуемого

 

 

 

 

XOR (A)

 

байта и аккумулятора

 

 

 

 

 

 

Исключающее

ИЛИ

XRL ad, #data8

0110.0011

3

2

(ad)<-(ad)

 

прямоадресуемого

 

 

 

 

XOR #data8

байта и константы

 

 

 

 

 

 

Сброс аккумулятора

CLR A

1110.0100

1

1

(A)<-0

 

Инверсия

 

CPL A

1111.0100

1

1

(A)<-NOT(A)

аккумулятора

 

 

 

 

 

 

 

Сдвиг

аккумулятора

RL A

0010.0011

1

1

(An+1)<-(An),

влево циклический

 

 

 

 

n=0…6, (A0) <-

 

 

 

 

 

 

 

(A7)

 

Сдвиг

аккумулятора

RLC A

0011.0011

1

1

(An+i)<-(An),

влево через перенос

 

 

 

 

n=0…6, (A0) <-

 

 

 

 

 

 

 

(С), (С) <-А7)

Сдвиг

аккумулятора

RR A

0000.0011

1

1

(An)<-(An+i),

вправо циклический

 

 

 

 

n=0…6, (A7)<-

 

 

 

 

 

 

 

(A0)

 

Сдвиг

аккумулятора

RRC A

0001.0011

1

1

(An)<-(An+i),

вправо через перенос

 

 

 

 

n=0…6, (A7) <-

 

 

 

 

 

 

 

(С), (С) <-(A0)

Обмен местами тетрад

SWAP A

1100.0100

1

1

(A0...A3)<-

 

в аккумуляторе

 

 

 

 

 

>(A4...A7)

 

10

В таблице 3 дано краткое описание команд логических операций,

которые выполняют следующие преобразования над байтами: логическое

«И», логическое «ИЛИ», «исключающее ИЛИ», инверсия, сброс в нулевое значение и сдвиг значения, которое хранится в аккумуляторе влево или вправо.

Группа команд битовых операций состоит из 12 команд, краткое описание которых приведено в таблице 4. Эти команды позволяют выполнять операции над отдельными битами: сброс, установку, инверсию бита, а также логические «И» и «ИЛИ».

Таблица 4 – команды битовых операций

Название команды

Мнемокод

КОП

Б

Ц

Операция

Сброс переноса

 

CLRC

1100.0011

1

1

(С)<-0

Сброс бита

 

 

CLR bit

1100.0010

2

1

(bit)<-0

Установка

 

 

SETBC

1101.0011

1

1

(С)<-1

переноса

 

 

 

 

 

 

 

Установка бита

 

SETB bit

1101.0010

2

1

(bit)<-1

Инверсия переноса

CPLC

1011.0011

1

1

(С)<-NOT(C)

Инверсия бита

 

CPL bit

1011.0010

2

1

(bit)<-NOT(bit)

Логическое И бита

ANL C, bit

1000.0010

2

2

(C)<-(C) AND (bit)

и переноса

 

 

 

 

 

 

 

Логическое

 

И

ANL C, /bit

1011.0000

2

2

(С)<-(С)AND

инверсии бита

и

 

 

 

 

(NOT(b))

переноса

 

 

 

 

 

 

 

Логическое

ИЛИ

ORL C, bit

0111.0010

2

2

(С)<-(С) OR (bit)

бита и переноса

 

 

 

 

 

 

Логическое

ИЛИ

ORL C, /bit

1010.0000

2

2

(С)<-

инверсии бита

и

 

 

 

 

(С)OR(NOT(bit))

переноса

 

 

 

 

 

 

 

Пересылка

бита

в

MOV C, bit

1010.0010

2

1

(C)<-(bit)

перенос

 

 

 

 

 

 

 

Пересылка

 

 

MOV bit, С

1001.0010

2

2

(bit)<-(C)

переноса в бит

 

 

 

 

 

 

В качестве "логического" аккумулятора, участвующего во всех операциях с двумя операндами, выступает флаг переноса «С» (разряд D7 PSW), а в качестве операндов могут использоваться 128 бит памяти данных и регистры специальных функций, допускающие адресацию отдельных бит.

Соседние файлы в папке Лабораторки