Некоммерческое акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра «Электроника»

  

 

 

ОСНОВЫ МИКРОПРОЦЕССОРНОЙ ТЕХНИКИ

Часть 3 

Методические указания к выполнению лабораторных работ

для студентов всех форм обучения специальности

5B070300 – Информационные системы

 

 

Алматы 2011

 

СОСТАВИТЕЛЬ: У.Т. Шанаев. Основы микропроцессорной техники. Часть 3. Методические указания к выполнению лабораторных работ  по курсу “Основы микропроцессорной техники” для студентов всех форм обучения специальности 5B070300 – Информационные системы. – Алматы: АУЭС, 2011. – 30 с.

 

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

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

Методические указания к лабораторным работам предназначены для студентов всех форм обучения по специальности 5B070300 – Информационные системы. Они могут быть использованы и для организации лабораторных занятий по идентичным темам аналогичных дисциплин, запланированных для других специальностей.

Ил. 3, табл. 3, библиогр. – 8 назв.

 

Рецензент:   д-р. физ-мат. наук, проф. С. Б. Бимурзаев               

 

Печатается по плану издания Некоммерческого акционерного общества “Алматинский университет энергетики и связи” на 2011 г.

 

© НАО “Алматинский университет энергетики и связи”, 2011 г.

 

Введение

Курс “Основы микропроцессорной техники”, посвященный изучению структурных принципов построения микропроцессорных систем и их функциональных основ, состоит из двух взаимосвязанных и взаимообусловленных частей: аппаратная часть (hardware) и программная часть (software). Ясно, что для наиболее полного усвоения курса требуется формирование знаний как по аппаратной, так и по программной частям курса.

В предыдущих методических разработках [1, 2] были представлены лабораторные работы, посвященные аппаратной части микропроцессорных систем, т.е. изучению принципов построения структурных блоков микропроцессорных систем и характера их функционирования.

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

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

Предлагаемая методика организации лабораторных занятий проверена многолетней практикой преподавания автора и испытана временем. Разнообразие форм организации учебного исследования обеспечивает более глубокие знания студентов по теории изучаемых элементов и устройств  цифровых систем и способствуют формированию у них практических навыков по проведению как моделирующих, так и практических экспериментов, что в конечном счете обеспечивает достижение целей лабораторных занятий.

 

1  Практические сведения и общие рекомендации

Выполнение рабочих заданий к лабораторным занятиям осуществляются в два этапа: виртуально (на программном симуляторе) и на реальном устройстве (на лабораторном стенде). Основой как виртуальной, так и практической частей является микропроцессор Intel 8085.

1.1 Система команд МП Intel 8085

В таблице 1.1 представлены команды микропроцессора Intel 8085. В первой колонке таблицы приведены мнемоники команд, где приняты следующие обозначения: r – регистры, rp – регистровые пары, М – ячейка памяти при косвенной адресации, b3b2 – второй и третий байты команды, port – адрес периферийного устройства.

Во второй колонке приведены коды команд (первый байт): в случае необходимости указания адреса регистра микропроцессора – в виде восьмиразрядного двоичного числа, а в остальных случаях – в виде шестнадцатеричного числа. Для разрядов обобщенных адресов регистров приняты следующие обозначения: для источников данных (Data Source) символ S, для приемников данных (Data Destination) – символ D, а для регистровых пар (Pair) – символ P.

В третьей колонке приведены сведения о флагах, устанавливаемых после выполнения соответствующей команды: символ “–” – никакой флаг не устанавливается, символ “+” – устанавливаются все флаги, “+” – устанавливаются все флаги, кроме флага переноса, “С” – устанавливается только флаг переноса. Эти флаги (S – отрицательности, Z – нуля, AC – десятичного переноса, P – четности, С – перенос) формируются в регистре флагов:

7

6

5

4

3

2

1

0

S

Z

0

AC

0

P

1

C

 

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

В последней колонке приведены комментарии к командам.

Т а б л и ц а 1.1

Мнемокод

Код

Флаги

Байты

Такты

Циклы

Комментарий

1

2

3

4

5

6

7

Команды пересылки

MOV r1, r2

01DDDSSS

1

4

1

r1 ← (r2)

MOV M, r

01110SSS

1

7

2

[(HL)] ← (r)

MOV r, M

01DDD110

1

7

2

(r) ← [(HL)]

MVI r, b2

00 DDD110

2

7

2

r1 ← b2

MVI M, b2

36

2

10

3

[(HL)] ← b2

LXI rpb3b2

00PP0001

3

10

3

rp ← b3b2

LDA b3b2

3A

3

13

4

A ← b3b2

STA b3b2

32

3

13

4

b3b2 ← (A)

Т а б л и ц а 1.1 (продолжение)

1

2

3

4

5

6

7

LHLD b3b2

2A

3

16

5

HL ← b3b2

SHLD b3b2

22

3

16

5

b3b2 ← (HL)

LDAX rp

00PP0010

1

7

2

A ← [(rp)]

STAX rp

00PP1010

1

7

2

[(rp)] ← (A)

XCHG

EB

1

4

1

(HL) ↔ (rp)

Команды арифметических и логических операций

ADD r

10000SSS

+

1

4

1

A ← (A) + (r)

ADD M

86

+

1

7

2

A ← (A) + [(HL)]

ADI b2

C6

+

2

7

2

A ← (A) + b2

ADC r

10001SSS

+

1

4

1

A ← (A) + (r) + (TC)

ADC M

8E

+

1

7

2

A ← (A) + [(HL)] + (TC)

ACI b2

CE

+

2

7

2

A ← (A) + b2 + (TC)

SUB r

10010SSS

+

1

4

1

A ← (A) – (r)

SUB M

96

+

1

7

2

A ← (A) – [(HL)]

SUI b2

D6

+

1

7

2

A ← (A) – b2

SBB r

10011SSS

+

1

4

1

A ← (A) – (r) – (TC)

SBB M

9E

+

1

7

2

A ← (A) – [(HL)] – (TC)

SBI b2

DE

+

2

7

2

A ← (A) – b2 – (TC)

INR r

00DDD100

(+)

1

4

1

r ← (r) + 1

INR M

34

(+)

1

10

3

[(HL)] ← [(HL)] + 1

DCR r

00DDD101

(+)

1

4

1

r ← (r) – 1

DCR M

35

(+)

1

10

3

[(HL)] ← [(HL)] – 1

INX rp

00PP0011

1

6

1

rp ← (rp) + 1

DCX rp

00PP1011

1

6

1

rp ← (rp) – 1

DAD rp

00PP1001

1

10

3

[(HL)] ← [(HL)] + (rp)

DAA

27

+

1

4

1

A ← (A)2-10

ANA r

10100SSS

+

1

4

1

A ← (A) ۸ (r)

ANA M

A6

+

1

4

1

A ← (A) ۸ [(HL)]

ANI b2

E6

+

2

7

2

A ← (A) ۸ b2

XRA r

10101SSS

+

1

4

1

A ← (A)  (r)

XRA M

AE

+

1

7

2

A ← (A)  [(HL)]

XRI b2

EE

+

2

7

2

A ← (A)  b2

ORA r

10110SSS

+

1

7

2

A ← (A) ۷ (r)

ORA M

B6

+

1

7

2

A ← (A) ۷ [(HL)]

ORI b2

F6

+

2

7

2

A ← (A) ۷ b2

CMP r

10111SSS

+

1

4

1

 (A) – (r)

CMP M

BE

+

1

4

1

 (A) – [(HL)]

CPI b2

FE

+

2

7

2

 (A) – b2

CMA

2F

1

4

1

 A ←  

STC

37

C

1

4

1

 TC ← 1

CMC

3F

C

1

4

1

 TC

RLC

07

C

1

4

1

 A7-1 ← (A6-0), A0 ← (TC), TC←A7

RRC

0F

C

1

4

1

 A6-0 ← (A7-1), A7 ← (TC), TC←A0

 

Окончание таблицы 1.1

1

2

3

4

5

6

7

RAL

17

C

1

4

1

 A7-1 ← (A6-0), A0 ← (A7), TCA7

RAR

1F

C

1

4

1

 A6-0 ← (A7-1), A7 ← (A0), TCA0

Команды управления

JMP b3b2

C3

3

10

3

PC ← b3b2

Jcond b3b2

11CCCC01

3

10

3

Cond = 1: PC ← b3b2

CALL b3b2

CD

3

18

5

SP ← (PC), PC ← b3b2

Ccond b3b2

11CCC100

3

2/5

9/18

Cond = 1:

SP ← (PC), PC ← b3b2

RET

C9

3

10

3

PC ← [(SP)]

Rcond

11CCC100

3

17/11

5/3

Cond = 1: PC ← [(SP)]

RST n

111nnn111

1

11

3

PC ← 8n

SPHL

E9

1

6

1

SP ← (HL)

Специальные команды

PUSH rp

11PP0101

1

11

3

SP ← (SP) – 2;

 [(SP)];[(SP) + 1]← (rp)

PUSH PSW

F5

1

11

3

SP ← (SP) – 2;

[(SP)],[(SP) + 1]←(A),(F)

POP rp

11PP0001

1

10

3

rp ← [(SP)],[(SP) + 1],

SP ← (SP) + 2

POP PSW

F1

1

10

3

F,A ← [(SP)],[(SP) + 1];

SP ← (SP) + 2

XTHL

E3

1

18

5

(HL) ↔ [(SP)],[(SP) + 1]

PCHL

F9

1

5

1

PC ← (HL)

IN port

DB

2

10

3

A ← (port)

OUT port

D3

2

10

3

port ← (A)

EI

FB

1

4

1

Разрешение на прерывание

ВI

F3

1

4

1

Запрет на прерывание

HLT

76

1

7

2

Останов

NOP

00

1

4

1

Нет операции

RIM

20

1

4

1

Чтение маски прерывания

SIM

30

1

4

1

Запись маски прерывания

 Код любой команды микропроцессора Intel 8085 можно легко определить по таблице 1.2, путем последовательной записи наименований горизонтали и вертикали, в пересечении которых размещена искомая команда.

Т а б л и ц а 1.2

 

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

 

0

NOP

LXI

B

STAX

B

INX

B

INR

B

DCR

B

MVI

B

RLC

 

DAD

B

LDAX

B

DCX

B

INR

C

DCR

C

MVI

C

RRC

0

1

 

LXI

D

STAX

D

INX

D

INR

D

DCR

D

MVI

D

RAL

 

DAD

D

LDAX

D

DCX

D

INR

E

DCR

E

MVI

E

RAR

1

2

RIM

LXI

H

SHLD

INX

H

INR

H

DCR

H

MVI

H

DAA

 

DAD

H

LHLD

DCX

H

INR

L

DCR

L

MVI

L

CMA

2

3

SIM

LXI

SP

STA

INX

SP

INR

M

DCR

M

MVI

M

STC

 

DAD

SP

LDA

DCX

SP

INR

A

DCR

A

MVI

A

CMC

3

4

MOV

B,B

MOV

B,C

MOV

B,D

MOV

B,E

MOV

B,H

MOV

B,L

MOV

B,M

MOV

B,A

MOV

C,B

MOV

C,C

MOV

C,D

MOV

C,E

MOV

C,H

MOV

C,L

MOV

C,M

MOV

C,A

4

5

MOV

D,B

MOV

D,C

MOV

D,D

MOV

D,E

MOV

D,H

MOV

D,L

MOV

D,M

MOV

D,A

MOV

E,B

MOV

E,C

MOV

E,D

MOV

E,E

MOV

E,H

MOV

E,L

MOV

E,M

MOV

E,A

5

6

MOV

H,B

MOV

H,C

MOV

H,D

MOV

H,E

MOV

H,H

MOV

H,L

MOV

H,M

MOV

H,A

MOV

L,B

MOV

L,C

MOV

L,D

MOV

L,E

MOV

L,H

MOV

L,L

MOV

L,M

MOV

L,A

6

7

MOV

M,B

MOV

M,C

MOV

M,D

MOV

M,E

MOV

M,H

MOV

M,L

HLT

MOV

M,A

MOV

A,B

MOV

A,C

MOV

A,D

MOV

A,E

MOV

A,H

MOV

A,L

MOV

A,M

MOV

A,A

7

8

ADD

B

ADD

C

ADD

D

ADD

E

ADD

H

ADD

L

ADD

M

ADD

A

ADC

B

ADC

C

ADC

D

ADC

E

ADC

H

ADC

L

ADC

M

ADC

A

8

9

SUB

B

SUB

C

SUB

D

SUB

E

SUB

H

SUB

L

SUB

M

SUB

A

SBB

B

SBB

C

SBB

D

SBB

E

SBB

H

SBB

L

SBB

M

SBB

A

9

A

ANA

B

ANA

C

ANA

D

ANA

E

ANA

H

ANA

L

ANA

M

ANA

A

XRA

B

XRA

C

XRA

D

XRA

E

XRA

H

XRA

L

XRA

M

XRA

A

A

B

ORA

B

ORA

C

ORA

D

ORA

E

ORA

H

ORA

L

ORA

M

ORA

A

CMP

B

CMP

C

CMP

D

CMP

E

CMP

H

CMP

L

CMP

M

CMP

A

B

C

RNZ

POP

B

JNZ

JMP

CNZ

PUSH

B

ADI

RST

0

RZ

RET

JZ

 

CZ

CALL

ACI

RST

1

C

D

RNC

POP

D

JNC

OUT

CNC

PUSH

D

SUI

RST

2

RC

 

JC

IN

CC

 

SBI

RST

3

D

E

RPO

POP

H

JPO

XTHL

CPO

PUSH

H

ANI

RST

4

RPE

PCHL

JPE

XCHG

CPE

 

XRI

RST

5

E

F

RP

POP

PSW

JP

DI

CP

PUSH

PSW

ORI

RST

6

RM

SPHL

JM

EI

CM

 

CPI

RST

7

F

 

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

 

 

1.2 Оборудование рабочего места:

-       компьютер;

-       программа 8085 Simulator IDE;

-       лабораторный стенд PU-2000 фирмы Degem Systems;

-       съемные платы EB-151 и EB-152;

-       соединительные провода и перемычки.

1.3 Описание рабочего места

Для выполнения виртуальной части работы на компьютере должна быть установлена программа 8085 Simulator IDE. Структура симулятора и использование его функциональных возможностей будет описаны постепенно в процессе выполнения лабораторных работ. Здесь же приведем краткое описание порядка организации работы на лабораторном стенде.

Центральным звеном микропроцессорной системы (микрокомпьютера) на лабораторном стенде является микропроцессор (МП) Intel 8085, который реализует выполнение задачи, предписанных программой (а именно, осуществляет передачу данных между различными ее модулями, выполняет арифметические и логические операции), а также управляет синхронизированной работой всех модулей МПС.

Память системы реализован в двух микросхемах:

-       микросхема 2764 (EPROM, Erasable Programmable Read-Only Memory), используемое для хранения управляющей программы;

-       микросхема 6116 (RAM, Random Access Memory), используемое для хранения рабочей программы и данных. Рабочая область ОЗУ, выделенная для записи программы, начинается с адреса 2100H.

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

Указанные компоненты системы, размещены на плате EB-151.

На плате EB-152 размещены:

-       клавиатура, с помощью которой вводится в память рабочая программа и данные, необходимые для ее работы;

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

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

-       установить плату EB-151 на лабораторный стенд, а плату EB-152 слева от него. Обеспечить совместимость плат EB-151 и EB-152 по питанию и возможность передачи данных между ними, выполнив следующие соединения между ними:

 

PU-2000

 

EB-152

+12 V

+12 V

12 V

12 V

+5 V

+5 V

GND

GND

RX

TX

TX

RX

 

-       установить переключатель S1 (SIG.ANAL/KB+DISP) на плате EB-152 в положение KB+DISP (или убедится в этом). Включить источник питания стенда и удостовериться в том, что дисплей EB-152 показывает “EBHt”;

-       перезапустить микрокомпьютер на плате EB-151 кратковременным нажатием кнопки “Reset” на этой плате. При правильном выполнении необходимых соединений дисплей на плате EB-152 должен показывать “Eb-151”, в противном случае необходимо проверить правильность соединений.

Для записи учебной программы (т.е. программы пользователя) в ОЗУ нажать клавишу MEM и ввести адрес первой ячейки памяти в адресное поле дисплея. Ввести необходимое значение кода в поле данных дисплея и нажать клавишу ENTER, при этом адрес ячейки памяти увеличится на единицу автоматически и можно будет ввести следующие данные (код операции или значение операнда). И т.д.

Проверка содержимого ячеек памяти осуществляется аналогично, т.е. нажатием клавиши MEM и вводом в адресное поле дисплея адреса первой проверяемой ячейки памяти. В дальнейшем нажимая клавишу ENTER можно последовательно изменять адреса ячеек и считывать их содержимое. При необходимости, разумеется, их можно изменить.

Для проверки содержимого регистров микропроцессора нажать клавишу REG и ввести номер регистра в адресное поле дисплея, после чего в поле данных дисплея отобразится содержимое указанного регистра. Аналогично можно просмотреть содержимое и других регистров. Номера проверяемых регистров можно изменять последовательно (см. таблицу 1.3) просто нажатием клавиши ENTER.

Т а б л и ц а 1.3

Номера регистров

Регистры

Описание регистра

1

A

Аккумулятор

2

B

Регистр B

3

C

Регистр C

4

D

Регистр D

5

E

Регистр E

6

H

Регистр H

7

L

Регистр L

8

F

Регистр флагов

9

I

Маска прерывания

A

PC

Программный счетчик

B

SP

Указатель стека

C

HL

Указатель памяти

D

AF

Слово состояния процессора

E

BC

Регистровая пара BC

F

DE

Регистровая пара DE

 

Запуск программы к работе осуществляется нажатием клавиши GO и вводом начального адреса программы, затем клавиши ENTER.

 


2 Лабораторная работа. Пересылки данных

Цель работы:

-       знакомство со структурой микропроцессорной системы (МПС) на основе микропроцессора Intel 8085;

-       изучение действий, выполняемых командами пересылки данных из состава команд микропроцессора Intel 8085, различающихся способами адресации;

-       изучение функциональных возможностей программного симулятора МПС на основе микропроцессора Intel 8085;

-       освоение порядка работы с лабораторным стендом, предназначенным для изучения программирования на языке Ассемблер.

2.1 Рабочее задание

2.1.1 В C:\Program Files\8085 Simulator IDE создать папку под именем, содержащем достаточную информацию о студенте (номер группы, фамилию и имя) и в дальнейшем сохранять все создаваемые файлы в нем.

2.1.2 Запустить программу симулятора иконой . В открывшемся основном окне симулятора (см. рисунок 2.1) выбрать Tools/Assembler и в окне Assembler File/New.

Рисунок 2.1

2.1.3 Сдвинув курсор на табулированное расстояние (клавишей Tab), ввести первую команду представленной ниже программы и нажать Enter. Аналогично продолжить ввод остальных команд программы. Метки записываются в начале строки. Сохранить (File/Save As) записанную программу под именем Transfers (Пересылки). Создается файл с расширением asm.

 

         ;WRITING to MEMORIES

SW:   ;Single Writing

         MVI A,0FH;Direct Loading

         STA 00D0H;Direct Writing

         NOP

 

S1:     ;Serial Writing-1

         MVI C,07h;Data Counter

         LXI D,00D0H;Initial Address

         MVI A,00H;Cleaning

T0:    ADI 13H;Expansion Step

         INX D;Address Increment

         STAX D;Indirect Writing

         DCR C;Monitoring of the Data Counter

         JNZ T0;Continue

         XCHG;Exchange

         NOP

 

S2:     ;Serial Writing-2

         MVI C,08H;Data Counter

T1:    ADI 09H;Expansion Step

         INX H;Address Increment

         MOV M,A;Indirect Writing

         DCR C;Monitoring of the Data Counter

         JNZ T1;Continue

         NOP

 

AW:  ;Data Access and Writing

         LXI D,00EFH;Initial Address

         MVI C,08H;Data Counter

T2:    MOV A,M;Indirect Loading

         STAX D;Indirect Writing

         DCX H;Address Decrement

         DCX D;Address Decrement

         DCR C;Monitoring of the Data Counter

         JNZ T2;Continue

         NOP

 

AC:   ;Data Access, Conversion and Writing

         MVI C,07H;Data Counter

T3:    MOV A,M;Indirect Loading

         RLC;Left Shift

         XCHG;Exchange

         MOV M,A;Indirect Writing

         DCX H;Address Decrement

         DCX D;Address Decrement

         XCHG;Exchange

         DCR C;Monitoring of the Data Counter

         JNZ T3;Continue

         NOP

        

SA:    ;Single Access and Writing

         LDA 00D0H;Direct Loading

         STA 00E0H;Direct Writing

         HLT;Ending

 

В этой программе, составленной в виде нескольких блоков, осуществляются пересылки данных между процессором и памятью. В первом блоке (Single Writing-1) осуществляется одиночная пересылка в память командой с прямой адресацией. Во втором блоке (Serial Writing) реализуется передача массива данных (в виде членов арифметической прогрессии) в память командой с косвенной адресацией. Более практичный способ передачи массива данных представлен в следующем блоке (Single Writing-2).

В следующих трех блоках (Data Access, Data Access and Conversion, Single Writing) осуществляются пересылки данных из одного участка памяти в другой с использованием аналогичных использованным ранее командам (только в обратном порядке).

 

2.1.4 В окне Assembler выбрать Tools/Assemble&Load. Создаются файлы с расширениями hex, lst, obj.

2.1.5 В основном окне симулятора выбрать Tools/Breakpoints Manager и установить контрольные точки после каждого блока, т.е. в строках с командой NOP (см. рисунок 2.2).

2.1.6 В основном окне симулятора выбрать скорость моделирования (Rate/…), например, Rate/Normal и запустить работу симулятора (Simulation/Start).

2.1.7 После каждой остановки программы в контрольных точках проанализировать действия команд в выполненном блоке и полученные результаты (в регистрах микропроцессора и в соответствующих ячейках памяти).

2.1.8 Продолжить работу симулятора, выбрав скорость моделирования (Rate/…).

Рисунок 2.2

При необходимости (или при желании) можно выполнить отдельные блоки программы раздельно. Для этого в первую строку программы ввести команду JMP с меткой блока и заменить команду NOP в конце блока на команду HLT.

 

2.1.9 Подготовить микрокомпьютер (лабораторный стенд) к работе (см. 1.3) и ввести в ячейки памяти микрокомпьютера коды команд отдельных блоков представленной программы. Коды команд можно определить с помощью таблицы 1.2 или воспользоваться полученными в предыдущих опытах кодами (например, в Memory Editor). Адреса переходов, разумеется, должны быть скорректированы в соответствии практическим размещением блоков программы в памяти системы. Каждый блок завершить командой RST7.

2.1.10 Запустить отдельные блоки программы на выполнение нажатием клавиши GO и вводом начального адреса блока (см. 1.3).

2.1.11 Проанализировать работу отдельных блоков программы на микрокомпьютере, сопоставляя данные, полученные на нем с данными на симуляторе.

2.2 Контрольные задания

1.     Объяснить внутреннюю структуру микропроцессора и функции ее составляющих.

2.     Объяснить действия команд пересылок, использованных в отдельных блоках программы.

3 Лабораторная работа. Однобайтная арифметика

Цель работы:

-       изучение действий, выполняемых однобайтными арифметическими командами (сложения и вычитания);

-       освоение принципов организации циклических программных структур;

-       освоение принципов организации работы с периферийными устройствами.

3.1 Рабочее задание

3.1.1 Запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Tools/Assembler, а затем File/New.

3.1.2 Ввести представленную ниже программу. Сохранить записанную программу под именем Single-Byte Arithmetic (Однобайтная арифметика).

 

         ;SINGLE-BYTE ARITHMETIC

DA:   ;Data Array (arithmetical progression)

         LXI H,00E0H;Initial Address

         MVI C,0AH;Data Quantity

         MVI A,00H;Cleaning

         MOV M,C;Writing in the Memory

SD:    INX H;Address Increment

         ADI 55H;Increment Step of the Linear Series

         MOV M,A;Writing in the Memory

         DCR C;Monitoring of the Data Counter

         JNZ SD;Continue

         NOP

 

CS:    ;Cumulative Summation

         ;SUM=((2a1+(n-1)d)/2)n

         ;a1-first operand,n-quantity,d-step,

         LXI H,00E0H;Initial Address

         MVI A,00H;Cleaning

         MOV B,A;Cleaning

         MOV C,M;Installation of the Data Counter

C1:    INX H;Address Increment

         ADD M;Addition

         JNC C2;Carry Monitoring

         INR B;Carry Accumulation

C2:    DCR C;Monitoring of the Data Counter

         JNZ C1;Continue

         NOP

 

RR:   ;Retention of Result

         INX H;

         MOV M,A;Low Byte

         INX H;

         MOV M,B;High Byte

         NOP

 

SS:    ;Series Subtraction

         LXI H,00E0H;Initial Address

         MOV C,M;Installation of the Data Counter

S1:     INX H;Address Increment

         SUB M;Subtraction

         JNC S2;Borrow Monitoring

         DCR B;Borrow Subtraction

S2:     DCR C;Monitoring of the Data Counter

         JNZ S1;Continue

         NOP

 

AD:   ;ALTERNATIVE of the Single-Byte Summation

         ;Data

         IN 01H;First Operand

         MOV E,A

         IN 01H;Data Quantity

         MOV C,A

         IN 02H;Step

         MOV D,A

         LXI H,0000H

         NOP

 

AC    ;Cumulative Summation-A

A1:    MOV A,E

         ADD D

         MOV E,A

         MOV A,L

         ADD E

         JNC A2

         INR H

A2:    MOV L,A

         DCR C

         JNZ A1

         MOV A,L

         OUT 03H

         MOV A,H

         OUT 04H

         HLT;Ending

 

Эта программа состоит из следующих блоков:

-       Data Array – осуществляет запись данных в память в виде членов арифметической прогрессии (заданные параметры n = 0AH – количество членов, a1 = 00H – первый член, d = 55H – шаг прогрессии можно изменить в процессе выполнения работы);

-       Cumulative Summation – определяет сумму членов арифметической прогрессии, записанных в память в предыдущем блоке программы;

-       Retention of Result – сохраняет в памяти полученный результат суммирования;

-       Series Subtraction – осуществляет последовательное вычитание членов арифметической прогрессии из полученной ранее суммы;

-       ALTERNATIVE of the Single-Byte Summation, состоящий из двух подблоков (Data и Cumulative Summation-A) – реализует другой способ определения суммы членов арифметической прогрессии с использованием периферийных устройств (IN, OUT).

 

3.1.3 В окне Assembler выбрать Tools/Assemble&Load.

3.1.4 В основном окне симулятора выбрать Tools/Breakpoints Manager и установить контрольные точки после каждого блока, т.е. в строках с командой NOP.

3.1.5 В окне симулятора открыть окно Tools/Peripheral Devices. В открывшемся окне Peripheral Devices нажать кнопку Device 1 и определить адрес порта как 01, а затем установить этот порт на IN. Аналогично определить адрес следующего порта как 02, и установить его также на IN. Определив адреса следующих портов как 03 и 04, установить их на OUT (см. рисунок 3.1).

3.1.6 В основном окне симулятора выбрать скорость моделирования (Rate/…) и запустить работу симулятора (Simulation/Start).

3.1.7 После каждой остановки программы в контрольных точках проанализировать действия команд в выполненном блоке и полученные результаты (в регистрах микропроцессора и в соответствующих ячейках памяти).

3.1.8 Продолжить работу симулятора, выбрав скорость моделирования (Rate/…).

Проверить соответствие полученных результатов суммирования с вычисленным по формуле .

При необходимости (по указанию преподавателя) выполнить отдельные блоки программы раздельно. Для этого в первую строку программы ввести команду JMP с меткой блока и заменить команду NOP в конце блока на команду HLT.

Рисунок 3.1

3.1.9 Подготовить микрокомпьютер (лабораторный стенд) к работе (см. 1.3 и 2.1.9). Ввести в ячейки памяти микрокомпьютера коды команд отдельных блоков представленной программы.

3.1.10 Запустить отдельные блоки программы на выполнение нажатием клавиши GO и вводом начального адреса блока (см. 1.3).

3.1.11 Проанализировать работу отдельных блоков программы на микрокомпьютере, сопоставляя данные, полученные на нем с данными на симуляторе.

3.2 Контрольные задания

1.     Объяснить структуры отдельных блоков программы и действия команд в них.

2.     Объяснить принципы организации работы с периферийными устройствами.


4 Лабораторная работа. Двухбайтная арифметика

Цель работы:

-       изучение порядка выполнения арифметических операций (сложения и вычитания) над двухбайтными (и более) операндами;

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

4.1 Рабочее задание

4.1.1 Запустить программу симулятора и в открывшемся окне выбрать Tools/Assembler, а затем File/New.

4.1.2 Ввести представленную ниже программу. Сохранить записанную программу под именем Double-Byte Arithmetic (Двухбайтная арифметика).

 

         ;DOUBLE-BYTE ARITMETIC

         ;Data Array (arithmetical progression)

         LXI H,00E0H;initial address

         MVI C,0AH;data quantity

         MOV M,C

         MVI A,00H;low byte

         MVI B,12H;high byte

DD:   ADI 15H;step of the low byte=15H

         INR B;step of the high byte=01H

         INX H

         MOV M,A;loading in the low byte memory

         INX H

         MOV M,B;loading in the high byte memory

         DCR C;monitoring of the data counter

         JNZ DD;continue

         NOP

 

CC:   ;Cumulative Summation

         ;SUM=((2a1+(n-1)d)/2)n

         ;a1-first operand,n-quantity,d-step,

         LXI H,00E0H;initial address

         LXI D,0000H;temporary repository for the result

         MOV B,M;installation of the data counter

         MOV C,B;doublet of the data counter

CS:    MOV A,E

         INX H

         ADD M;low byte

         MOV E,A

         MOV A,D

         INX H

         ADC M;high byte

         MOV D,A

         DCR B;monitoring of the data counter

         JNZ CS;continue

         NOP

        

AD:   ;Addition with Direct Addressing

         MOV A,E

         ADI 3DH;low byte

         MOV E,A

         MOV A,D

         ACI 5AH;high byte

         MOV D,A

         NOP

        

RR:   ;Retention of the Result

         INX H;

         MOV M,E;low byte

         INX H;

         MOV M,D;high byte

         NOP

        

SS:    ;Series Subtraction

         LXI H,00E0H

S0:     MOV A,E

         INX H

         SUB M;low byte

         MOV E,A

         MOV A,D

         INX H

         SBB M;high byte

         MOV D,A

         DCR C;monitoring of the data counter

         JNZ S0;continue

         NOP

 

SD:    ;Subtraction with Direct Addressing

         MOV A,E

         SUI 3DH;low byte

         MOV E,A

         MOV A,D

         INX H

         SBI 5AH;high byte

         MOV D,A

         NOP

 

AL:    ;ALTERNATIVE of the Double-Byte Summation

         LDA 00E0H

         MOV C,A;data counter

         LXI SP,00E1H;initial address

         LXI H,0000H;Double-Byte Accumulator

AS:    POP D;Pulling

         DAD D;Double-Byte Summation

         DCR C;monitoring of the data counter

         JNZ AS;continue

         LXI B,5A3DH

         DAD B

         HLT

 

Эта программа состоит из следующих блоков:

-       Data Array – осуществляет запись данных в память в виде членов арифметической прогрессии (заданные параметры n = 0AH – количество членов, a1 = 1200H – первый член, d = 0115H – шаг прогрессии можно изменить в процессе выполнения работы). Сформированный член прогрессии сохраняется в двух ячейках памяти (сначала – младший байт, затем – старший байт);

-       Cumulative Summation – определяет сумму членов арифметической прогрессии, записанных в память в предыдущем блоке программы;

-       Addition with Direct Addressing – осуществляет суммирование командами с непосредственной адресацией;

-       Retention of Result – сохраняет в памяти полученный результат суммирования;

-       Series Subtraction – осуществляет последовательное вычитание членов арифметической прогрессии из полученной ранее суммы;

-       Subtraction with Direct Addressing – осуществляет вычитание командами с непосредственной адресацией;

-       ALTERNATIVE of the Double-Byte Summation – реализует другой способ определения суммы членов арифметической прогрессии с использованием команд двухбайтного сложения DAD.

 

4.1.3 В окне Assembler выбрать Tools/Assemble&Load.

4.1.4 В основном окне симулятора выбрать Tools/Breakpoints Manager и установить контрольные точки после каждого блока, т.е. в строках с командой NOP.

4.1.5 В основном окне симулятора выбрать скорость моделирования (Rate/…) и запустить работу симулятора (Simulation/Start).

4.1.6 После каждой остановки программы в контрольных точках проанализировать действия команд в выполненном блоке и полученные результаты (в регистрах микропроцессора и в соответствующих ячейках памяти).

4.1.7 Продолжить работу симулятора, выбрав скорость моделирования (Rate/…).

Проверить соответствие полученных результатов суммирования с вычисленным по формуле .

При необходимости (по указанию преподавателя) выполнить отдельные блоки программы раздельно. Для этого в первую строку программы ввести команду JMP с меткой блока и заменить команду NOP в конце блока на команду HLT.

4.1.8 Подготовить микрокомпьютер (лабораторный стенд) к работе (см. 1.3) и ввести в ячейки памяти микрокомпьютера коды команд отдельных блоков представленной программы.

4.1.9 Запустить отдельные блоки программы на выполнение нажатием клавиши GO и вводом начального адреса блока (см. 1.3).

4.1.10 Проанализировать работу отдельных блоков программы на микрокомпьютере, сопоставляя данные, полученные на нем с данными на симуляторе.

4.2 Контрольные задания

1.     Объяснить структуры отдельных блоков программы и действия команд в них.

2.     Объяснить различия действий арифметических команд с переносом и без переноса.

3.     Объяснить принципы организации сложения двухбайтных данных с помощью команд DAD.


5 Лабораторная работа. Программа умножения

Цель работы:

-       изучение порядка составления программы арифметического умножения двух однобайтных чисел;

-       освоение принципов организации работы с периферийными устройствами.

5.1 Алгоритм умножения

В микропроцессоре Intel 8085 отсутствует команда умножения, поэтому для операции умножения приходится составлять соответствующую программу. Определим алгоритм умножения. С целью наглядного объяснения машинного алгоритма, ниже приведены три варианта реализации процесса умножения десятичных чисел по известному со школьной скамьи алгоритму:

 

 

В первом варианте приведен привычный для нас порядок умножения, начиная с младшего разряда множителя и со сдвигом частичных произведений налево. Во втором варианте приведен порядок умножения, начиная со старшего разряда множителя и со сдвигом частичных произведений направо. В третьем варианте учтено, что возможное число разрядов результата умножения двух чисел с одинаковым числом разрядов (в нашем примере – четыре) в два раза больше чем у множителей. Поэтому в начале операции значение произведения принято восьмиразрядным нулем. Для того, чтобы частичные сложения осуществлялись над числами с одинаковым числом разрядов, первый множитель расширен до восьми разрядов (добавлением нулей слева) и операции сдвига (они указаны стрелками) осуществляются перед началом каждого частичного умножения. Именно такой алгоритм был принят для программной реализации умножения. двухбайтных двоичных чисел:

-        ввиду того, что результат умножения восьмиразрядных чисел будет шестнадцатиразрядным числом и в связи с тем, что частичные сложения выполняются также над шестнадцатиразрядными числами, в качестве шестнадцатиразрядного аккумулятора была принята регистровая пара HL, которая очищается в начале выполнения программы;

-       В регистр E регистровой пары DE вводится первое число (множимое), а регистр D обнуляется, в результате чего множимое становится шестнадцатиразрядным числом;

-       с целью обеспечения возможности сдвига, второе число (множитель) помещается в аккумуляторе (во избежания путаницы его в дальнейшем будем называть регистром A);

-       для обеспечения контроля над числом операций сдвига, число разрядов множителя (восемь) помещается в регистр С;

-       перед осуществлением каждого частичного умножения накопившийся до этого результат (в регистровой паре HL) сдвигается влево (путем удваивания);

-       очередное значение зазряда множителя определяется путем сдвига содержимого регистра A (множителя) влево и в случае равенства его нулю –частичное умножение этим и завершается (т.е. предыдущим сдвигом регистровой пары HL), а при равенства его единице – к содержимому регистровой пары HL добавляется содержимое регистровой пары DE;

-       после каждого частичного умножения содержимое счетчика сдвига убавляется на единицу и при равенстве его нулю – программа умножения завершает свою работу.

Итак, операция сдвига выполняется восемь раз, а число операции сложения определяется числом единиц в составе множителя.

5.2 Рабочее задание

5.2.1 Запустить программу симулятора и в открывшемся окне выбрать Tools/Assembler, а затем File/New.

5.2.2 Ввести представленную ниже программу. Сохранить записанную программу под именем Multiplication (Умножение).

 

M:     ;MULTIPLICATION

         ;Data

         IN 01H

         MOV E,A

         MVI D,00H

         IN 02H

         LXI H,0000H

         MVI C,08H

         ;Implementation

M1:    DAD H

         RLC

         JNC M2

         DAD D

M2:    DCR C

         JNZ M1

         MOV A,L

         OUT 03H

         MOV A,H

         OUT 04H

         HLT

 

Эта программа состоит из двух блоков: в блоке Data осуществляется ввод значений множителей и подготовка данных к умножению, а в блоке Implementation реализуется процесс умножения введенных данных.

 

5.2.3 В окне Assembler выбрать Tools/Assemble&Load.

5.2.4 В окне симулятора открыть окно Tools/Peripheral Devices. В открывшемся окне Peripheral Devices определить адреса портов между 01…04 и первые два порта (с адресами 01 и 02) установить на IN, а остальные на OUT.

5.2.5 В основном окне симулятора выбрать Tools/Breakpoints Manager и установить контрольную точку в строке с командой DAD H (т.е. перед осуществлением очередного частичного умножения).

5.2.6 В основном окне симулятора выбрать скорость моделирования (Rate/…) и запустить работу симулятора (Simulation/Start).

5.2.7 После каждой остановки программы в контрольной точке проанализировать действия команд в предыдущем этапе и полученные результаты (в регистрах микропроцессора).

5.2.8 Продолжить работу симулятора, выбрав скорость моделирования (Rate/… или другую опцию).

5.2.9 Подготовить микрокомпьютер (лабораторный стенд) к работе (см. 1.3 и 2.1.9) и ввести в ячейки памяти микрокомпьютера коды команд отдельных блоков представленной программы и значения множителей.

5.2.10 Запустить программу на выполнение нажатием клавиши GO и вводом ее начального адреса (см. 1.3).

5.2.11 Проанализировать работу программы на микрокомпьютере, сопоставляя данные, полученные на нем с данными на симуляторе.

5.3 Контрольные задания

1.     Объясните алгоритм умножения, принятого в качестве основы для его программной реализации.

2.     Объясните структуру программы умножения.


6 Лабораторная работа. Работа со стеком

Цель работы:

-       освоение принципов организации работы с подпрограммами;

-       освоение принципов организации работы со стеком.

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

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

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

При вызове подпрограммы адрес следующей команды основной программы, к которому необходимо возвратиться после завершения работы подпрограммы, сохраняется в стеке. Каждая подпрограмма должна завершаться командой RET, обеспечивающей возврат к основной программе.

При необходимости данные в регистрах (точнее, в регистровых парах) могут быть сохранены в стеке с помощью команды PUSH, которые затем считываются оттуда командой POP.

С целью рассмотрения структуры и порядка организации работы с подпрограммами и со стеком в работе рассматривается программа решения задачи по выражению y = a1*a2 + a3*a4 + .

6.2 Рабочее задание

6.2.1 Запустить программу симулятора и в открывшемся окне выбрать Tools/Assembler, а затем File/New.

6.2.2 Ввести представленную ниже программу. Сохранить записанную программу под именем Stack (Стек).

 

         ;SUM=a1*a2+a3*a4+sum(ai,n,d)

         LXI SP,0FFH

         MVI B,0A0H

 

         ;mul1=a1*a2

         IN 01H;first multiplier

         MOV E,A

         IN 02H;second multiplier

         CALL MUL

         PUSH H

         CALL PER

         NOP

 

         ;mul2=a3*a4

         IN 01H;first multiplier

         MOV E,A

         IN 02H;second multiplier

         CALL MUL

         PUSH H

         CALL PER

         NOP

 

         ;sum(ai,n,d)

         IN 01H;quantity - n

         MOV C,A

         IN 02H;step - d

         MOV D,A

         IN 01h;first operand - a1

         MOV D,A

         LXI H,0000H

         CALL SUM

         CALL PER

         NOP

 

         ;S3

         POP D

         DAD D

         POP D

         DAD D

         CALL PER

         HLT

 

MUL: ;Multiplication (subroutine)

         MVI D,00H

         LXI H,0000H

         MVI C,08H

M1:    DAD H

         RLC

         JNC M2

         DAD D

M2:    DCR C

         JNZ M1

         RET

 

SUM: ;Cumulative Summation (subroutine)

CS3:  MOV A,E

         ADD D

         MOV E,A

         MOV A,L

         ADD E

         JNC CS4

         INR H

CS4:  MOV L,A

         DCR C

         JNZ CS3

         RET

 

PER:  ;Displaying on the Periphery

         ;and Writing on the Memory

         MOV C,B

         MVI B,00H

         MOV A,L

         OUT 03H

         STAX B

         INR C

         MOV A,H

         OUT 04H

         STAX B

         INR C

         MOV B,C

         RET

 

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

-       SUM – заголовок основной программы, где присваивается значение указателю стека SP и информация, предназначенная для организации работы подпрограммы отображения результатов на устройстве вывода;

-       mul1 и mul2 – осуществляется ввод данных для умножения и вызывается подпрограмма умножения, а затем – подпрограмма отображения;

-       sum – осуществляется ввод данных для суммирования и вызывается подпрограмма суммирования, а затем – подпрограмма отображения;

-       S3 – вычисляет конечный результат, т.е. суммирует частичные результаты, полученные в предыдущих этапах.

В программе используются три подпрограммы:

-       Multiplication – осуществляет умножение двух чисел, введенных перед вызовом подпрограммы;

-       Cumulative Summation осуществляет суммирование предварительно введенных данных;

-       Displaying – осуществляет отображение полученных в подпрограммах результатов и сохраняет их в памяти.

 

6.2.3 В окне Assembler выбрать Tools/Assemble&Load.

6.2.4 В окне симулятора открыть окно Tools/Peripheral Devices. В открывшемся окне Peripheral Devices определить адреса портов между 01…04 и первые два порта (с адресами 01 и 02) установить на IN, а остальные на OUT.

6.2.5 В основном окне симулятора выбрать Tools/Breakpoints Manager и установить контрольные точки после каждого блока основной части программы, т.е. в строках с командой NOP.

6.2.6 В основном окне симулятора выбрать скорость моделирования (Rate/…) и запустить работу симулятора (Simulation/Start).

6.2.7 После каждой остановки программы в контрольных точках проанализировать действия команд в выполненном блоке и полученные результаты (в регистрах микропроцессора и в соответствующих ячейках памяти).

6.2.8 Продолжить работу симулятора, выбрав скорость моделирования (Rate/…).

6.2.9 Подготовить микрокомпьютер (лабораторный стенд) к работе (см. 1.3 и 2.1.9) и ввести в ячейки памяти микрокомпьютера коды команд отдельных блоков представленной программы.

6.2.10 Запустить программу на выполнение нажатием клавиши GO и вводом начального адреса блока (см. 1.3).

6.2.11 Проанализировать работу отдельных блоков программы на микрокомпьютере, сопоставляя данные, полученные на нем с данными на симуляторе.

6.3 Контрольные задания

1.     Объясните принципы организации работы с подпрограммами.

2.     Объясните принципы организации работы со стеком.

 

Список литературы

1.     Шанаев О.Т. Основы микропроцессорной техники. Часть 1. Методические указания к выполнению лабораторных работ . – Алматы: АУЭС, 2011.

2.     Шанаев О.Т. Основы микропроцессорной техники. Часть 2. Методические указания к выполнению лабораторных работ . – Алматы: АУЭС, 2011.

3.     Шанаев О.Т. Система моделирования Electronic Workbench / на казахском и русском языках. – Алматы: АИЭС, 2003.

4.     Токхайм Р. Микропроцессоры. Курс и упражнения: Пер. с. англ. – М.: Мир, 1988.

5.     Угрюмов Е. П. Цифровая схемотехника. – СПб.: БХВ-Петербург, 2004.

6.     Сугано Т. Дж., Уидмер Н. С. Цифровые системы. Теория и практика: Пер. с англ. – М.: Издательский дом “Вильямс”, 2004.

7.     Хамахер К. И др. Организация ЭВМ. Пер. с. англ. – СПб.: Питер, 2003.

8.     Уэйкерли Дж. Ф. Проектирование цифровых устройств: Пер. с. англ. – М.: Постмаркет, 2002.

  

Содержание 

Введение  3

1 Практические сведения и общие рекомендации  4

2 Лабораторная работа. Пересылки данных  10

3 Лабораторная работа. Однобайтная арифметика  14

4 Лабораторная работа. Двухбайтная арифметика  18

5 Лабораторная работа. Программа умножения  22

6 Лабораторная работа. Работа со стеком  25

Список литературы   29

 

Дополнительный план 2011 г., поз. 2