Оглавление

 

ВВЕДЕНИЕ................................................................................................................................... 4

1.     Основные правила составления программ на Ассемблере........ 5

1.1. Коды команд....................................................................................................................... 5

1.2. Программная модель микропроцессорной системы....................................................... 6

1.3. Команды микропроцессора КР580ВМ80......................................................................... 9

2. Кросс-средства отладки.......................................................................................... 13

2.1. Формат ассемблерной строки......................................................................................... 13

2.2.  Директивы Ассемблера................................................................................................... 14

2.2. Режим ассемблирования.................................................................................................. 16

2.4. Режим симуляции прикладной программы................................................................... 16

3. Учебный микропроцессорный комплект (УМК).................................... 19

4. Лабораторные работы............................................................................................... 22

4.1. Изучение правил составления ассемблерных программ и их отладки с помощью кросс-средств (Л.Р.1)................................................................................................................................................... 22

4.2. Изучение УМК и правил составления простых программ (Л.Р.2).............................. 23

Приложение 1. Программа перемножения двух однобайтовых чисел без знака....................................................................................................................................................... 32

Приложение 2.  Система команд микропроцессора КР580ВМ80......... 34


ВВЕДЕНИЕ

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

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

   Язык Ассемблера относится к машинно-ориетированным языкам низкого уровня. Каждой команде языка Ассемблера соответствует, как правило, машинная команда. Каждый тип МП имеет свою систему команд и, следовательно, свой язык Ассемблера. Команды, адреса и данные записываются в виде буквенно-цифровых символов. Мнемонические обозначения команд обычно легко ассоциируются с реально выполняемыми действиями (в англоязычном написании). Практика показывает, что адаптация к языку Ассемблера происходит быстро. После составления нескольких простых программ мнемонические обозначения наиболее употребительных команд запоминаются. Написанная на Ассемблере программа переводится на машинный язык с помощью транслирующей программы, называемой также Ассемблер. При этом проводится проверка синтаксиса языка с указанием ошибок, которые необходимо исправить. Программирование на Ассемблере позволяет создавать максимально эффективные с точки зрения быстродействия и потребного объема памяти программы.

   Существенное повышение производительности труда при проектировании прикладных программ дает использование языков высокого уровня, специально приспособленных для программирования МП. Являясь машинно-независимыми, они позволяют весь процесс получения программы в машинных кодах свести к трансляции (переводу) с одного представления в другое. С помощью специальной компилирующей программы  производится трансляция с языка высокого уровня  на язык Ассемблера и далее с помощью Ассемблера - в машинные коды. Каждому оператору языка высокого уровня соответствует 5 - 10 и более команд Ассемблера, что, очевидно, облегчает программирование. Поскольку трансляторы создаются для широкого круга программ, то, естественно, осуществляемый ими перевод не позволяет достичь той же эффективности, как при программировании на Ассемблере.  Более того, окончательная отладка программы ведется обычно на  Ассемблере. Из языков высокого уровня  последнее время широко используется язык СИ.

Теоретические основы использования микропроцессорных устройств излагаются в курсе «Цифровые устройства и микропроцессоры». Практические навыки составления программ на Ассемблере отрабатываются студентами в процессе практических занятий и лабораторных работ.   Лабораторные работы предусматривают создание программ на языке Ассемблера с последующей их отладкой.

Лабораторный практикум на кафедре РПУ организован в настоящее время в двух вариантах либо на базе «Учебных микропроцессорных комплектов» (УМК), либо программных средств отладки в дисплейном классе кафедры.

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

 

1.         Основные правила составления программ на Ассемблере

 

1.1                      . Коды команд

 

Микропроцессор работает только с двоичными кодами. Среди совокупности этих кодов имеется определенная группа кодов, каждый из которых может «заставить» микропроцессор выполнить определенные действия (операции). Такой код часто называется кодом команды и, как правило, определяет одну команду из системы команд микропроцессора. Код любой команды представляется в запоминающем устройстве двоичным восьмиразрядным числом (байтом). Всего с помощью байта можно формировать 28 = 256 различных кодо­вых комбинаций. Почти столько же команд (244) имеет микропроцессор КР580ВМ80.  Естественно, что запомнить  244  кода довольно трудно, и поэтому каждому коду ставится в соответствие мнемоническое название (мнемоника) команды, которое является сокращением от английских слов, описывающих ее действие. Мнемонический код команд позволяет легче запомнить их функции и значительно упрощает написание программ. Такой язык написания программ называется Ассемблером. После того, как программа написана на Ассемблере, ее необходимо снова перевести на язык, понятный микро­процессору, т. е. перевести в последовательность двоичных восьмиразрядных чисел. Перевод в последовательность двоичных цифр может происходить автоматически с помощью специальных про­грамм-трансляторов (такие программы носят название «кросс-ассемблер» или «ассемблер») или вручную.

Для ручной трансляции можно использовать табл.1, в которой приведены все команды микропроцессора КР580ВМ80. С помощью этой таблицы можно легко и быстро сопоставить мнемонику команды с ее кодом . Код  каждой команды приведен здесь в верхней горизонтальной строке (младшие раз­ряды) и в крайнем левом столбце (старшие разряды) в шестнадцатеричной системе счисления. Например, команда STAX D имеет код 12Н, команда JZ ADR код  СА.

 

Таблица 1.

 

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

 

0

NОР

 

 

 

MOV

B,B

MOV

D,B

MOV

H,B

MOV

M,B

ADD

B

SUB

B

ANA

B

DRA

B

RNZ

RNC

RPO

RP

0

1

LXI

B

LXI

D

LXI

H

LXI

SP

MOV

B,C

MOV

D,C

MOV

H,C

MOV

M,C

ADD

C

SUB

C

ANA

C

DRA

C

POP

B

POP

D

POP

H

POP

RSW

1

2

STAX

B

STAX

D

SHLD

STA

MOV

B,D

MOV

D,D

MOV

H,D

MOV

M,D

ADD

D

SUB

D

ANA

D

DRA

D

JNZ

JNC

JPO

JP

2

3

INX

B

INX

D

INX

H

INX

SP

MOV

B,E

MOV

D,E

MOV

H,E

MOV

M,E

ADD

E

SUB

E

ANA

E

DRA

E

JMP

OUT

XTHL

D1

3

4

INR

B

INR

D

INR

H

INR

М

MOV

B,H

MOV

D,H

MOV

H,H

MOV

M,H

ADD

H

SUB

H

ANA

H

DRA

H

CNZ

CNC

CPO

CP

4

5

DCR

B

DCR

D

DCR

H

DCR

М

MOV

B,L

MOV

D,L

MOV

H,L

MOV

M,L

ADD

L

SUB

L

ANA

L

DRA

L

PUSH

B

PUSH

D

PUSH

H

PUSH

PSW

5

6

MVI

B

MVI

D

MVI

H

MVI

М

MOV

B,M

MOV

D,M

MOV

H,M

HTL

ADD

M

SUB

M

ANA

M

DRA

M

ADI

SUI

ANI

ORI

6

7

RLC

RAL

DAA

STC

MOV

B,A

MOV

D,A

MOV

H,A

MOV

M,A

ADD

A

SUB

A

ANA

A

DRA

A

RST

0

RST

16

RST

32

RST

48

7

8

 

 

 

 

MOV

C,B

MOV

E,B

MOV

L,B

MOV

A,B

ADC

B

SBB

B

XRA

B

CMP

B

RZ

RC

RPE

RM

8

9

DAD

B

DAD

D

DAD

H

DAD

SP

MOV

C,C

MOV

E,C

MOV

L,C

MOV

A,C

ADC

C

SBB

C

XRA

C

CMP

C

RET

 

PCHL

SPHL

9

A

LDAX

B

LDAX

D

LHLD

LDA

MOV

C,D

MOV

E,D

MOV

L,D

MOV

A,D

ADC

D

SBB

D

XRA

D

CMP

D

JZ

JC

JPE

JM

A

B

DCX

B

DCX

D

DCX

H

DCX

SP

MOV

C,E

MOV

E,E

MOV

L,E

MOV

A,E

ADC

E

SBB

E

XRA

E

CMP

E

 

IN

XCHG

EI

B

C

INR

C

INR

E

INR

L

INR

A

MOV

C,H

MOV

E,H

MOV

L,H

MOV

A,H

ADC

H

SBB

H

XRA

H

CMP

H

CZ

CC

CPE

CM

C

D

DCR

C

DCR

E

DCR

L

DCR

A

MOV

C,L

MOV

E,L

MOV

L,L

MOV

A,L

ADC

L

SBB

L

XRA

L

CMP

L

CALL

 

 

 

D

E

MVI

C

MVI

E

MVI

L

MVI

A

MOV

C,M

MOV

E,M

MOV

L,M

MOV

A,M

ADC

M

SBB

M

XRA

M

CMP

M

ACI

SBI

XRI

CPI

E

F

RRC

RAR

CMA

CMC

MOV

C,A

MOV

E,A

MOV

L,A

MOV

A,A

ADC

A

SBB

A

XRA

A

CMP

A

RST

8

RST

24

RST

40

RST

56

F

 

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

 

 

 

 

1.2. Программная модель микропроцессорной системы

 

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

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

Программная модель системы, построенной на базе микропро­цессора серии КР580, состоит из следующих элементов:

программно-доступных регистров и триггеров разрешения прерывания;

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

программно-доступных восьмиразрядных регистров.

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

Регистр общего назначения (РОН) это один из шести восьми­разрядных регистров микропроцессора, обозначенных буквами  В, С, D, Е, Н, L, или аккумулятор, обозначенный буквой А. Ре­гистры В и С, D и Е, Н и L в некоторых командах рассматри­ваются как шестнадцатиразрядные регистры, называемые реги­стровыми парами. Регистры В, D и Н образуют старшие восемь разрядов регистровых пар, а регистры С, Е и L – младшие.

Регистр указатель стекаC) это шестнадцатиразрядный регистр, который содержит адрес вершины стека. Стекэто динамическая последовательная структура данных в ОЗУ, орга­низованная таким образом, что очередная запись данных всегда осуществляется в вершину (на­чало) стека. Максимальный размер стека равен адресуемой емкости памяти. В вершину сте­ка могут записываться только шестнадцатибитные данные. При записи данных в стек содержи­мое регистра указателя стека уменьшается на 2, а при считы­вании увеличивается на 2.

Регистр признаков (F) это восьмиразрядный регистр, содер­жащий признаки результата выполнения команды (рис. 1).

 

    7       6      5      4      3      2      1      0

 

S

Z

 

O

 

V

 

O

 

P

 

1

 

C

 

 

Распределение признаков по разрядам

 

 

S – признак знака;

Z – признак нуля;

V – признак дополнительного переноса;

P – признак четности;

C – признак переноса.

 

Рис.1. Регистр признаков

 

Признаки устанавливаются следу­ющим образом:

- признак S единица, если седьмой разряд результата равен единице, в противном случае ноль;

-признак нуля Z единица, если во всех разрядах результата ноли, в противном случае ноль;

- признак дополнительного переноса V единица при переносе из третьего разряда или при заеме в третий разряд результата, в противном случае ноль;

- признак четности Р единица, если результат в двоичном коде содержит четное количество единиц, в противном случаеноль;

- признак переноса С единица при переносе из седьмого раз­ряда или при заеме в седьмой разряд результата, в противном случае ноль.

Аккумулятор и регистр признаков образуют слово состояния процессора, обозначенное буквами PSW. Аккумулятору соответ­ствуют восемь старших разрядов, а регистру признаковмладшие.

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

Триггер разрешения прерывания используется для управле­ния прерываниями микропроцессора. Если триггер установлен в единицу, то прерывание разрешается, если триггер установлен в ноль, то прерывание запрещается.

Программно-доступные восьмиразрядные ячейки памяти используются в качестве памяти микропроцессорной системы (МПС) . Разряды ячейки памяти нумеруются справа налево целыми числами, начиная с ноля. Максимальная емкость памяти, реализуемой запоминающим устройством, равна 65 536 байт.

Программно-доступные восьмиразрядные регистры использу­ются для ввода и вывода. Максимальное число регистров для ввода данных составляет 256, для вывода данных столько же.

Команды микропроцессора ис­пользуют только те элементы данных, обработка которых осуществляется непосредственно микропроцессором, т. е. восьми- и шестнадцатибитовые. Восьмибитовые данные это восемь би­т (один байт), которые хранятся в РОН или ячейке памяти и обрабатываются микропроцессором как одно целое.

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

Операнды команд могут храниться в программно-доступных регистрах микропроцессора или в памяти МПС. Для указания операнда в регистре используются: регистровая адресация и ре­гистровая неявная адресация.

При регистровой адресации в коде команды существует поле для указания регистра, содержащего операнд. При регистровой неявной адресации специального поля в коде команды нет.

Для указания операнда в памяти используются адресации: непосредственная, прямая, косвенная и стековая.

При непосредственной адресации операнд задается в команде. При прямой адресации в команде указывается адрес операнда. При косвенной регистровой адресации адрес операнда указывается в регистровой паре или для команды XTHL в регистре указа­теля стека.

 

1.3. Команды микропроцессора КР580ВМ80

 

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

 

Команды пересылки и загрузки  данных:

- MOV R1,R2 – пересылка из регистра в регистр;

- LDAX B(D) – пересылка из ячейки памяти, адрес которой записан в  регистровой паре ВС (DE), в аккумулятор;

- STAX В(D) – пересылка из аккумулятора в ячейку памяти, адрес которой записан в регистровой паре BC (DE);

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

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

- SPHL – пересылка данных из регистровой пары HL в указатель стека;

- PCHL – пересылка данных из регистровой пары HL в счетчик команд;

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

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

- MVI R_B2 – загрузка  второго байта команды в регистр R;

- LXI B (D,H)_B2_B3 – загрузка второго и третьего байтов команды в регистровую пару BС (DЕ,HL).

 

Команды обмена данными:

- XCHG – обмен данными между парами регистров HL и DE;

- XTHL – обмен данными между парой регистров HL и вершиной стека (L)¬®C], (H)¬®C+1].

 

Группа арифметических команд.

Команды сложения :

- ADD R – сложение содержимого аккумулятора с содержимым            регистра R  (A) ¬ (A) + (R);

- ADI_B2 – сложение содержимого аккумулятора со вторым байтом команды    (A) ¬ (A) + B2;

- ADC R – сложение содержимого аккумулятора с содержимым регистра R и признаком (С)  (А)¬ (A) + (R) + (С);

- ACI_B2 – сложение содержимого аккумулятора со вторым байтом команды и признаком (С)  (A) ¬ (A) + B2 +(С);

- DAD B (D, H, SP) – сложение содержимого пары регистров HL с содержимым пары регистров BC (DE или HL  или указателем стека) и запись результата в пару HL.

 

Команды вычитания :

- SUB R – вычитание из содержимого  аккумулятора содержимого регистра R      (A) ¬ (A) – (R);

- SUI_B2 – вычитание из содержимого аккумулятора  второго байта команды         (A) ¬ (A) – B2;

- SBB R – вычитание из содержимого аккумулятора содержимого регистра R и признака (С)      (А)¬ (A) – (R) – (С);

- SBI_B2 – вычитание из содержимого аккумулятора второго байта команды и признака (С)  (A) ¬ (A) – B2 – (С).

 

Операции инкремента и декремента:

- INR  R    увеличение   содержимого  регистра на 1      (R) +1 ® (R);

- INX B (D, H, SP) – увеличение содержимого пары регистров BC (DE), (HL), (SP) на 1 ;

- DCR R – уменьшение содержимого регистра R на 1     (R) -1 ® (R);

- DCX B ( D, H, SP) – уменьшение содержимого пары регистров BC  (DE), (HL), (SP) на 1 .

 

Группа команд поразрядной обработки данных.

Логические команды :

- ANA R – операция “И” между содержимым аккумулятора и содержимым регистра                                      (A) ¬ (A) L (R);

- ANI_B2 – операция “И” между содержимым аккумулятора и вторым байтом команды                         (A) ¬ (A) L B2;

- ORA R – операция “ИЛИ” между содержимым аккумулятора и содержимым регистра R            (A) ¬ (A) V (R);

- ORI_B2 – операция  “ИЛИ” между содержимым аккумулятора и вторым байтом команды                         (A) ¬ (A) V B2;

- XRA R – операция “ИЛИ-НЕ” между содержимым аккумулятора и содержимым регистра R            (A)  ¬ (A) " (R);

- XRI_B2 – операция  “ИЛИ-НЕ” между содержимым аккумулятора и вторым байтом команды           (A) ¬ (A) " B2.

 

 

Команды сравнения:

- CMP R     операция  (A) – (R); если (A) = (R), то Z = 1; если

     (А) <(R), то С=1;

- CPI_B2     операция  (А) – B2; если (A) = B2, то Z = 1; если

     (A)< B2, то С=1.

 

Команды сдвига: 

- RLC – сдвиг влево (каждый бит сдвигается на один разряд влево, а 7 бит переносится в 0 и одновременно записывается в признак (С)) Dm®Dm+1, D7®D0, D7®C;

- RRC сдвиг вправо (каждый бит сдвигается на один разряд вправо, а 0 бит переносится в 7 и одновременно записывается в признак (С)) Dm+1®Dm, D0® D7, D0®C;

- RAL сдвиг влево через перенос (каждый бит сдвигается на один разряд влево, 7 бит записывается в признак (С), а бит из (С) записывается в 0 бит) Dm®Dm+1, D7®C, C®D0;

- RAR сдвиг вправо через перенос (каждый бит сдвигается на один разряд вправо, 0 бит записывается в признак (С), а бит из (С) записывается в 7 бит) Dm+1®Dm, D0®C, C®D7.

 

Команда инверсии содержимого аккумулятора - СМА     (А) ¬ (Ā).

 

Команды безусловного перехода:

- JMP_ В2_ В3 – записать информацию из второго и третьего байта команды в счетчик команд;

- PCHL – записать содержимое пары регистров HL в счетчик команд.

 

Команды условного перехода:

JNCесли признак     c = 0

JC    если признак     c = 1

JNZесли признак     z = 0

JZ    если признак     z = 1

JPOесли признак     p = 0

JPEесли признак      p = 1

JP   если признак      s = 0

JM   если признак      s = 1

то перейти по адресу, записанному во втором и третьем байтах команды,   

иначе перейти к следующей команде.

 

 

Команда безусловного вызова подпрограммы :

- CALL_В2_ В3 – вызов подпрограммы с начальным адресом, записанным во втором и третьем байтах команды.

 

 

 

 

 

Команды условного вызова подпрограммы:

-         CNZ если     z = 0

-         CZ    если     z = 1

-         CNC если     c = 0

-         СС    если     c = 1

-         СРО если     p = 0

-         СРЕ если     p = 1

-         СР    если     s = 0

-         CM    если    s = 1

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

иначе перейти к следующей команде

 

 

Команда безусловного возврата из подпрограммыRET.

 

Команды условного возврата из подпрограмм:

-         RNZ если      z = 0

-         RZ    если      z = 1

-         RNC если      c = 0

-         RС     если     c = 1

-         RРО если      p = 0

-         RРЕ если      p = 1

-         RР     если      s = 0

-         RM   если     s = 1

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

иначе продолжить выполнение подпрограммы.

 

 

Команды операций со стеком:

- PUSH B(D,H) – запись содержимого регистровой пары BC (DE,HL) в стек              (B,D,H) ®[ УС-1 ], (C,E,L) ®[ УС-2 ], (УС)=(УС)-2;

- PUSH PSW – запись слова состояния в стек                                                                     (A) ®[УС-1], (F) ®[ УС-2 ], (УС)=(УС)-2;

- POP B(D,H) – запись из стека в регистровую пару BC(DE,HL)

 [УС] ® (C,E,L), [УС+1] ®(B,D,H),  (УС)=(УС)+2; 

- POP PSW   запись слова состояния из стека

 [УС] ® (F), [УС+1] ®( A),  (УС)=(УС)+2. 

 

Команды управления микропроцессором:

-         CMC – инверсия признака (С) (С) ® (С);

-         STC   – запись 1 в признак (С) 1 ® (С);

-         EI      – разрешение прерываний;

-         DI      – запрет прерываний;

-         NOP  – команда «нет операции»;

-         НLТ  – останов.

Ввод-вывод через порты МПС осуществляется специальными командами микропроцессора: IN ADDR и OUT ADDR, где ADDR адрес внешнего устройства. Так как адрес внешнего устройства указывается в одном байте, то микропроцессор может обмениваться информацией не более чем с 256 внешними устрой­ствами.

Число различных команд микропроцессора составляет 78, и для них зарезервировано 78 имен команд, перечисленных выше. Многие базовые команды из числа 78 порождают несколько раз­личных кодов операций, поэтому общее число кодов команд составляет 244 (см. табл. 1).

Время выполнения команды, оцениваемое числом тактов микро­процессора, составляет 4 – 18 тактов. Для подавляющего числа команд время выполнения команды (число тактов) есть величина постоянная, однако существуют команды, для которых это время может меняться. Такими командами являются команды условного вызова и возврата из подпрограмм. Время выполнения команды зависит от того, выполняется условие или нет.  Если условие выполняется, время выполнения команды  увеличивается.

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

 

2. Кросс-средства отладки

2.1. Формат ассемблерной строки

 

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

- ассемблирование исходного файла;

- моделирование на программном уровне (симуляция) исходного файла;

- моделирование на аппаратном уровне (эмуляция) исходного файла.

В лабораторном практикуме плата с МП отсутствует, поэтому обучение проводится на программном уровне.

Исходный файл прикладной программы пишется в любом текстовом редакторе и ему присваивается расширение .asm. Запись программы на Ассемблере требует соблюдения определенных правил. Программа пишется в виде последовательности команд. Каждая команда записывается в одной строке и имеет четыре поля:

 

МЕТКА      ОПЕРАЦИЯ           ОПЕРАНД             КОММЕНТАРИЙ

 

Не обязательно использовать все поля, но они должны быть в указанном порядке.

МЕТКА - это символическое имя адреса команды, находящейся в данной строке; обычно метки придаются командам, к которым предусматривается обращение в процессе выполнения программы. Метка начинается с буквы и ее длина неограниченна, но различаются только первые восемь символов. Нельзя внутри метки использовать пробел. Нельзя в качестве меток записывать имена регистров, коды команд и другие зарезервированные сочетания (например, А, М, СМР и т.п., но А2, ММ, СМР9 можно). В одной программе не должно быть двух и более одинаковых меток. Разделителем между меткой и операцией является двоеточие.

ОПЕРАЦИЯ - в этом поле содержатся мнемокоды  команд или директивы ассемблера, которые описываются ниже. Разделителем между кодом команды и операндами является пробел.

ОПЕРАНД - это символические имена регистров, адресов, меток или константы. Целочисленные константы могут быть определены в двоичной (префикс b, b’11101101), шестнадцатеричной (префикс h, h’2a3f) или десятеричной (префикс отсутствует) системах счисления. При наличии двух операндов разделителем служит запятая. У некоторых команд операнды отсутствуют (RRC, NOP и др.) и поле операндов остается пустым. Операнд может быть выражением. На начальном этапе обучения программированию на Ассемблере их можно не использовать. С правилами составления выражений можно познакомиться в литературе.

КОММЕНТАРИЙ начинается с точки с запятой. Если строка начинается        с точки с запятой, то вся строка считается комментарием, и в ней могут присутствовать любые символы в любой последовательности. Комментарий является вспомогательным средством, используемым для пояснения и документирования программ. Не следует пренебрегать комментариями, так как через короткое время программа становится непонятной даже ее автору.

В приложении 1 приведен пример записи программы на Ассемблере.

 

 

2.2.  Директивы Ассемблера

 

Директивы Ассемблера (или псевдокоманды) управляют работой транслятора и не переводятся в машинные коды. Используемый в лаборатории транслятор распознает 15 директив. В табл. 2 приведены правила записи некоторых наиболее употребительных директив. Метки, заключенные в квадратные скобки, необязательны. Все директивы могут иметь метки и комментарии.

 

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

 

Директива .END  располагается на последней строке и указывает транслятору на завершение программы. В программе может быть только одна Директива .END.

 

Директива .EQU (эквивалентность) ставит в соответствие константам, адресам, регистрам и т.п. символические имена. В случае изменения , например,  адресов достаточно отредактировать только директиву .ORG.

 

Директива .SET  действует также как директива .EQU, однако в отличие от .EQU может употребляться в программе неоднократно, переопределяя значение символического имени. Это позволяет использовать одно и то же символическое имя  в разных значениях.

 

 

Таблица 2

 

 

Дирек-тива

Синтаксис

Пример

 .ORG

.ORG <выражение>

.ORG h’800; Установить адрес h’800

END

.END

 

EQU

.EQU<имя> ,<выражение>

.EQU POR, H’ 20; Уровень порога равен 32 вольтам

SET

.SET<имя> , <выражение>

.SET A_TAB, H’8D0; Начальный адрес таблицы 8D0

DB

.DB ,  <список выражений>

AT: .DB 23,hab,’stop’; В память заносятся 23, 16-ричное число ab и 4символа в КОИ 8. Метка АТ соответствует адресу числа 23.

DW

.DW , <список выражений>

.DW h’3de7,1999,’a’

RS

.RS , <выражение>

matrica:.RS 9 ; Резервирует 9 ячеек памяти для матрицы 3*3

 

Директива .DB  резервирует ячейки памяти и помещает в них представленные выражения. В качестве выражения может присутствовать цепочка символов, заключенная в кавычки, например, ‘STOP’. На каждое выражение или символ отводится один байт.

 Директива .DW  действует аналогично директиве DB  с той лишь разницей, что каждое выражение хранится в двух ячейках памяти и цепочки символов не допускаются.

 Директива .RS только резервирует ячейки памяти, в качестве выражения обычно записывается просто число резервируемых ячеек. Часто эта директива обозначается как DS.

  

 

2.2                      . Режим ассемблирования

 

   Вызов транслятора с языка Ассемблера осуществляется  командой IASM85<NAME>, где <NAME> - имя прикладной программы, написанной согласно изложенным выше правилам. Расширение asm можно не указывать. Ассемблирование выполняется сразу и выдается сообщение:

         000XXX  lines assembled - проассемблировано 000ХХХ строк,

                   0 Errors detected -          ошибок нет.

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

(тип ошибки ) in line xx   column  xx  - в строке хх,  колонке хх,

(тип ошибки ) in line xx   column  xx  - в строке хх,  колонке хх,

000ХХХ  lines assembled - проассемблировано 000ХХХ строк,

2 Errors detected- обнаружено 2 ошибки.(2 ошибки взято для примера).

В ходе ассемблирования создаются еще файл листинга с тем же именем и расширением  lst и объектный файл с расширением obj. Причем оба файла создаются как при отсутствии, так и при наличии ошибок. Места ошибок отмечаются в листинге символом ^. Ошибки в исходном файле исправляются в текстовом редакторе с повторным ассемблированием. Редактирование текста выполняется по правилам текстового редактора. Файл листинга кроме исходного текста содержит дополнительно номера строк, адреса ячеек памяти и содержимое этих ячеек, т.е. машинные коды (см. приложение 1).

Объектный файл в формате INTEL, который в реальных условиях с помощью программатора записывается в ПЗУ, в данном случае используется симулятором.

 

2.4. Режим симуляции прикладной программы

 

Программа симуляции (моделирования) вызывается командой AVSIM85 или командой AV.bat. В появляющемся меню следует выбрать режим А, т.е. режим моделирования только одного МП. Раскрывается экран, вид которого показан на рис.2. Нижняя часть экрана содержит меню команд управления режимом симуляции (режим команд). Каждая из команд имеет свое подменю. В остальной части экрана отражается состояние МП, содержимое блоков памяти, ввод/вывод и  текст программы на Ассемблере (режим экрана). Переключение режимов производится клавишей Esc.

Для управления симулятором задействованы горячие клавиши F1- F10:

F1-пуск отлаживаемой программы пользователя в непрерывном режиме;

F2 - перемещение указателя точки останова вверх;

F3 - фиксация точки останова (точки останова сбрасываются после их прохода и при повторном выполнении программы их следует при                  необходимости переустановить);

F4 - перемещение указателя точки останова вниз;

F5 - выбор скорости симуляции (HI, MID, LOW), HI - основной режим       быстрой симуляции, MID и LOW - медленное пошаговое выполнение программы при удерживании клавиши F1;

F6 - управление дисплеем (ON  - обновление после каждой команды,                  OFF - по завершению программы);

F9 - пошаговое выполнение программы назад);

F10 - - пошаговое выполнение программы вперед.

Горячие клавиши активны в обоих режимах. Ниже приводится описание наиболее употребительных команд меню и подменю. Дополнительные сведения можно получить по команде HELP .

 

Рис.2.  Экран симулятора

 

Dump - определение отображаемых участков памяти (Memory Space).

         Expression - ввод выражения (числа) в регистр или ячейку памяти, отмеченные курсором в режиме экрана. Вводимые данные отображаются также справа в виде кода КОИ8. Если ввод производится в память, то они одновременно отображаются в левой части экрана как коды  МП.

         Load - загрузка файла данных (Data), программы (Program), таблицы символов (Symbol-table). При загрузке программы и данных обязательно указывается расширение obj!

         IO - подсоединение файла входных данных.

         Memory  - работа с областью памяти: обнуление, перемещение массива или запись в массив константы.

         Patch (Patch code) - вставка мнемокода команды МП в ячейку памяти, адрес которой находится в РС.

Set - установка: Memory map - определение областей ОЗУ (RAM) и ПЗУ (ROM); cYcles - включение счетчика циклов выполняемой программы;            

 Passpoint - отметка команд, помеченные команды подсчитываются в ходе выполнения программы; в отличие от точек останова, эти пометки не сбрасываются автоматически.

SetUp - установка числа команд, исполняемых в пошаговом режиме назад.

Reset - сброс, Cpu -обнуление счетчика команд и регистра флагов, состояние других регистров не изменяется; cYcles - выключение счетчика циклов.

eXecute - выполнение команд МП, результат отражается на экране

Quit - выход из программы симулятора (следует нажать подряд Q и E).

        

Вызов команд производится нажатием выделенных клавиш.

Например, загрузка программы: L, P <имя программы с расширением .obj>, Enter. Можно также пользоваться клавишами управления курсором для выделения выбранной команды.

Возвращение из подменю в меню производится нажатием клавиш Ctrl/C

Если в отлаживаемой программе имеются команды ввода/вывода (IN/OUT), то адресам в этих командах следует присвоить значения 0,1,2 или 3. Вводимое значение набирается в «режиме экрана».

Массивы данных, если они предусмотрены в программе, вводятся в зарезервированную область памяти также, как и программа, только с использованием команды DATA. Эти же данные можно ввести непосредственно в память в «режиме экрана» в шестнадцатеричной форме.

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

- распределить память (S, M, A<начальный и конечный адреса >; O< начальный и конечный адреса >; в учебных программах можно всю область памяти определять как ОЗУ);

- загрузить программу, не забывая расширение obj (L, P <имя>);

- загрузить массив данных и вводимое число, если это предусмотрено в программе;

- установить начальный адрес программы (E <адрес>;  курсор должен указывать на программный счетчик РС); можно воспользоваться командой сброса (R, C);

- выполнять программу в пошаговом режиме, отмечая изменения содержимого регистров и памяти;

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

3. Учебный микропроцессорный комплект (УМК)

 

 

УМК состоит из следующих составных частей: микроЭВМ, пульта оператора, блока питания.

 

ОУ

 
МИКРОЭВМ

Подпись: Управл. сигналы  (8 бит)Подпись: Адрес (16 бит)Подпись: Данные (8 бит) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


          Блок питания

 
                                                                  + 5 В

  220 В                                                           +12В                                                 

- 5 в              -5 В

            

 

Рис.3. Структурная схема УМК

 

МикроЭВМ является основной составной частью и управляет работой всего УМК. Все обращения к памяти, операции ввода – вывода, вычисления выполняются микроЭВМ или ею же инициируются.

Пульт оператора предназначен для взаимодействия операто­ра с микроЭВМ.

Блок питания обеспечивает постоянными стабилизированными напряжениями микроЭВМ, пульт, а также макетную плату..

МикроЭВМ состоит из операционного устройства (ОУ) посто­янного запоминающего устройства (ПЗУ), оперативного запоминаю­щего устройства (ОЗУ) и устройства пошагового выполнения прог­рамм.

Пульт оператора состоит из клавиатуры, шестиразрядного дисплея, световой индикации и управляющих кнопок  сброс "СБ", прерывание "ПР", шаг "ШГ", а также переключателей работа/шаг "РБ/ШГ"  и команда/цикл  "КМ/ЦК"  м. рис. 1).

Основой микроЭВМ является ОУ, реализованное на базе МП КР580ВМ80, которое производит все операции по обработке информации Исходным состоянием ОУ является чтение информации по нулевому адресу ПЗУ. ОУ прини­мает это состояние после нажатия управляющей кнопки "СБ" на пульте оператора.

Информация о состоянии ОУ фиксируется в регистре состоя­ния в начале каждого машинного цикла.

В ПЗУ записана программа "Монитор", обеспечивающая ввод информации с клавиатуры пульта оператора и вывод ее на дисплей.

Программа онитор" занимает 1 кбайт ПЗУ и использует последние 54 ячейки ОЗУ, еще 1 кбайт зарезервирован зa пользователем. ОЗУ используется для хранения программ пользователя и имеет емкость 1 кбайт.

Устройство пошагового выполнения программ переводит ОУ в состояние "Ожидание" после выполнения очередного шага. Возможны два пошаговых режима работы: покомандный шаг и поцикловый шаг. Вызов пошагового режима работы осуществляется пере­ключателем "РБ/ШГ", выбор величины шага переключателем "КМ/ЦК". Для последующего шага необходимо нажать кнопку "ШГ", при этом после выполнения очередного шага на световой индикации отображается состояние адресной шины, шины данных и регистра состояния ОУ в двоичном коде.

Выполнение программы может быть остановлено нажатием управляющей кнопки "ПР". При этом состояния всех регистров ОУ сохраняется в ОЗУ, откуда они опять могут быть загружены в ОУ и выполнение программы продолжится, начиная с точки останова.

Внешний вид лицевой панели УМК отображен на pис. 4.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 

Рис. 4. Передняя панель УМК

 

1 – индикация шины адреса; 2 – индикация шины данных; 3 – индикация регистра состояний; 4 – СБ ( сброс); 5 – ПР ( прерывание); 6 – ШГ ( шаг);    7 – РБ/ШГ ( работа / шаг); 8 – КМ/ЦК ( команда / цикл); 9 – разъём для подключения макетной платы.

 

 

 

 

 

 

 

 


4. Лабораторные работы

 

4.1. Изучение правил составления ассемблерных программ и их отладки с помощью кросс-средств (Л.Р.1)

 

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

 

Подготовка к работе

 

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

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

а) числа последовательно вводятся с внешнего устройства  с адресом 2;

б) числа находятся в ОЗУ по выбранным адресам.

В обоих случаях предусмотрите вывод результата на внешнее устройство с адресом 3  и сохранение в ячейке ОЗУ  

Запишите в шестнадцатеричной системе счисления вводимые числа и результат, а также содержимое используемых РОН, аккумулятора и регистра флагов по завершении программы. Рассмотрите два случая: сумма не превышает значения 255 и сумма превышает 255. Программу оформите в виде табл.1.

                                                                                             Таблица 1

  

 

Работа в лаборатории

 

1. Создайте свой каталог и скопируйте в него программы av.bat, a85.com, avsim85.exe, avsim85.hlp и подкаталог error.

Данную и все последующие лабораторные работы проводите только в своем каталоге!

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

3. В текстовом редакторе (Shift/F4) наберите подготовленную дома программу. Проассемблируйте ее и исправьте возможные ошибки.

4. Вызовите моделирующую программу Avsim85, загрузите прикладную программу и выполните ее в пошаговом режиме, отмечая изменения содержимого регистров МП и памяти. Загрузку и выполнение прикладной программы проведите для всех рассмотренных дома вариантов.

Содержание отчета

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

 

4.2.         Изучение УМК и правил составления простых программ (Л.Р.2)

Цели работы:

1.       Изучение устройства и принципов функционирования УМК.

2.       Освоение базовых рабочих процедур.

3.       Закрепление навыков программирования на языке Ассемблер.

1. Устройство и принцип работы УМК

Устройство и принцип работы УМК описаны в разделе 3. Подробнее рассмотрим только функционирование устройства пошагового выполнения программы. Устройство пошагового выполнения программы переводит ОУ в состояние ожидания после выполнения очередного шага. Вызов пошагового режима работы осуществляется переключателем "РБ/ШГ", выбор величины шага  переключателем "КМ/ЦК". Для последующе­го шага необходимо нажать кнопку "ШГ". При этом после выпол­нения очередного шага на светодиодном индикаторе отображается сос­тояние адресной вины, шины данных и регистра состояния ОУ  в двоичном коде.

Команды выполняются по машинным циклам (1 ¸ 5 циклов в команде). Имеется десять типов машинных циклов и  соответственно десять слов состояния (см. табл.1).

                                                                                                    Таблица 1.

Состояние ОУ

Разряды регистра состояния ОУ

MEM

INR

MI

OUT

HLTA

STACK

WO/

INTA

Выбор команды

1

0

1

0

0

0

1

0

Чтение памяти

1

0

0

0

0

0

1

0

Запись в память

0

0

0

0

0

0

0

0

Чтение стека

1

0

0

0

0

1

1

0

Запись в стек

0

0

0

0

0

1

0

0

Ввод

0

1

0

0

0

0

1

0

Вывод

0

0

0

1

0

0

0

0

Прерывание

0

0

1

0

0

0

1

1

Останов

1

0

0

0

1

0

1

0

Прерывание в останове

0

0

1

0

1

0

1

1

 

Перечислим органы управления.   

 Директивные клавиши служат для вызова директив и имеют следующие обозначения и назначения:

"П" (Память) чтение и изменение содержимого ячеек памяти,

"РГ" (Регистр) чтение и изменение содержимого регистров МП,

"СТ" (Старт) – запуск программы пользователя,

"КС" (Контрольная сумма) определение контрольной суммы массива памяти: используется для контроля правильности ввода ранее отлаженной программы,

"ЗК" (Заполнение константой) заполнение массива памяти константой,

"ПМ" (Перемещение массива) перемещение массива в адресном пространстве памяти,

"ВП" (Выполнить) означает конец работы с директивой,

"¾" (Пробел) разделитель при вводе нескольких переменных.

Информационные клавиши служат для ввода адресов и данных в шестнадцатеричном коде и содержат шестнадцатеричные символы. Одновременно часть из них используется для ввода индентификаторов регистров МП:

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

В, С , D, Е – одноименные регистры,

8/Н – регистр  H,

9/L регистр L,

F регистр флагов (признаков),

4/РН старший байт счетчика команд,

5/PL младший байт счетчика команд,

6/SН старший байт указателя стека,

7/SL младший байт указателя стека.

На лицевой панели находятся пять кнопок управления:

~    включение/выключение УМК,

СБ (Сброс) устанавливает нулевой адрес в счетчике команд,

ПР (Прерывание) позволяет прервать выполнение программы,

РБГ (Работа/Шаг) используется для перевода выполнения программы в пошаговом режиме,

ШГ (Шаг) – каждое нажатие на кнопку ведет к выполнению одного шага,

КМ/ЦК переключатель дискреты шага (КМ шаг соответствует выполнению одной команды, ЦК шаг соответствует выполнению одного машинного цикла).

Дисплей содержит 6 разрядов: четыре левых отображают адрес, два правых  информацию (в шестнадцатеричном коде).

При неправильной работе с клавиатурой в крайней левой позиции дисплея высвечивается символ “?”. Нажмите кнопку ²СБ² для возвращения в исходное состояние.

Светодиодная индикация состоит из набора светодиодов (0 – светодиод не горит, 1 – горит).

Верхний ряд отображает состояние адресной шины (16 бит).

Второй ряд отображает состояние шины данных (8 бит).

Третий ряд отображает разряды регистра состояний (8 бит).

 

2. Подготовка УМК к работе

Установите кнопку~″ в отжатое состояние.

1.    Подключите УМК к сети переменного тока 220 В.

2.    Переключатель "РБ/ШГ" установите в отжатое состояние ″РБ″.

3.    Включите УМК, нажав кнопку ~″.

4. Нажмите кнопку "СБ". При этом в крайней левой позиции дисплея должен появиться знак "–". После этого УМК готов к работе.

 

3. Базовые рабочие процедуры

 

Внимание! Перед заданием директив с помощью управляющих кла­виш необходимо нажать ″СБ″.

 

Индикация и изменение содержимого памяти

Если необходимо узнать содержимое ячейки памяти ОЗУ с определенным адресом, то последовательно нажимают клавиши:

"П" "АДРЕС" "ВП",

 где "АДРЕС" – адрес в шестнадцатерич­ном коде. При этом в левых четырех разрядах дисплея высвечивается адрес, а в двух правых содержимое ячейки памяти.

Внимание! Пользователю доступен массив ОЗУ с адресами

0800 ­¸ ОВFF.

Если необходимо посмотреть содержимое следующей ячейки, то надо нажать клавишу ″—″.

Если информацию, хранящуюся в просматриваемой ячейке памяти надо изменить, то новые данные вводят с помощью инфор­мационных клавиш. При этом новые значения высвечиваются в двух правых разрядах дисплея. После этого нажимают клавишу "ВП" или для перехода к следующей ячейке клавишу "—". Директива завершается нажатием клавиши ″ВП″.

Пример 1:  – просмотрите и измените содержимое ячеек памяти:

0800       на

0801      

0802      

0803      

0804      

0805       

0806      

0807      

3A

00

0B

2F

32

01

0B

76

 

 

 Индикация и изменение содержимого регистров

Если надо узнать содержимое регистра, то последовательно нажимают клавиши: "РГ" "X" "ЗП",

где "Х" - информационная клавиша, идентифицирующая регистр. На дисплее высвечивается идентификатор регистра, а в двух правых разрядах его содержимое.

Идентификаторы регистров:

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

В, С, Д, Е, Н, Lрегистры общего назначения (РОН),

F регистр условий,

SL - младший байт указателя стека,

SН - старший байт указателя стека,

PL - младший байт счетчика команд,

РН - старший байт счетчика команд.

Все регистры по 8 бит.Если содержимое просматриваемого регистра изменять не надо, то нажимают ″—″ и набирают идентификатор другого регист­ра. Если содержимое регистра надо изменить, то набирают новые данные в шестнадцатеричном коде (два символа) и нажимают клавишу "—". После этого можно набирать идентификатор следующе­го регистра.

Для завершения директивы нажимают клавишу "ВП".

Пример 2:    просмотрите содержимое регистров общего назначения.

.

 Заполнение массива памяти константой

Константа представляется в шестнадцатеричном коде двумя символами, адреса ячеек ОЗУ четырьмя символами.

Последовательность нажатия клавиш:

"ЗК" "АДРЕС 1" "¾" "АДРЕС 2" "¾" "К" "ВП",

где АДРЕС 1 – адрес первой ячейки массива памяти;

АДРЕС 2 – адрес последней ячейки массива памяти;

"К" - константа в шестнадцате­ричном коде(00 ¸ FF)

Внимание! Заполнять только массив 0800 ¸ ОВFF.

Пример 3:   заполните массив с адреса 0В00 до адреса 0ВFF числом F8.

   проверьте содержимое соответствующих ячеек памяти.

 

 Перемещение массива памяти в адресном пространстве

Последовательность нажатия клавиш:

"ПМ" "АДРЕС 1" "—" "АДРЕС 2" "—" "АДРЕС 3" "ВП",

где АДРЕС 1 – начальный адрес перемещаемого массива;

АДРЕС 2 – конечный адреса перемещаемого массива;

АДРЕС 3 – новый начальный адрес массива.

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

Пример 4:     заполните массив с адреса 0800 до адреса 082F числом 1С,

        переместите массив на начальный адрес 0900,

        проверьте содержимое соответствующих ячеек.

 

 Определение контрольной суммы массива памяти

 

Последовательность нажатия клавиш:

 "КС" "АДРЕС 1" "—" "АДРЕС 2" "ВП",

где АДРЕС 1 – началь­ный адрес массива памяти,

АДРЕС 2 – конечный адрес массива памяти.

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

Пример 5:     заполните массив с адреса 0В00 ¸ 0В10 константой 01

        вычислите контрольную сумму массива,

        заполните массив 0В00 ¸FF константой 02

        вычислите контрольную сумму массива

 

 Запуск программы пользователя

 

Последовательность нажатия клавиш:

"СТ" "АДРЕС 1" "—" "АДРЕС 2" "—" "АДРЕС 3" "ВП",

 где АДРЕС 1 – начальный ад­рес программы,

АДРЕС 2 и АДРЕС 3 – адреса выполнения пре­рывания программы (могут отсутствовать)

Состояние регистров микропроцессора при достижении адре­сов 2 и 3 сохраняется в ОЗУ, и управление передается программе "Монитор". Пользователь может задать любую директиву. Продол­жение программы последует после повторного нажатия клавиши "ВП".

Внимание! Программа должна умещаться в пределах массива

0800 ¸ 0AFF  (1 кбайт).

 

 Пошаговое выполнение программы

 Имеются две разновидности пошагового выполнения програм­мы: поцикловый режим "ЦК" и покомандный режим "КМ".

Для вызова пошагового режима:

- установите переключатель "РБ/ШГ" в положение "ШГ" (кнопка утоплена), при которой происходит подключение световой ин­дикации;

- переключателем "КМ/ЦК" выберите один из режимов работы;

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

После этого световая индикация отобразит начальный адрес программы, данные по этому адресу и содержимое регистра сос­тояния. Программа выполняется путем нажатия кнопки "ШГ". Для выхода из пошагового режима установите переключатель "РБ/ШГ" в состояние "РБ" (кнопка отжата) и нажмите кнопку "ШГ".

Пример 6: запустите программу находящеюся в памяти ОЗУ(адреса 0800¸0807) в пошаговом режиме. Следите за световой индикацией.

 

 

 Прерывание выполнения программы

 

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

 

4.     Запись и выполнение программы

4.

Микропроцессор БИС КР580ВМ80 имеет фиксированный набор команд. Программа записывается последовательно в массив памяти ОЗУ 0800 ¸FF. Для записи данных исследуемых программ используют ячейки ОЗУ с адресами 0B00 ¸ 0BFF.

Система команд микропроцессора КР580ВМ80А приведена в Приложении 1.

Время выполнения команды измеряют в машинных тактах, рав­ных периоду синхронизации (0,5 мкс при ƒт = 2 МГц).

Рассмотрим простейшую программу (программа 1), извлекающую число из ячейки памяти с адресом 0В00, инвертирующую его и записывающую результат в адрес памяти 0В01.

Программа 1 мнемокодах)

Мнемокод

Комментарий

LDA     0B00

Получить число из ячейки с адресом 0B00

CMA

Инвертировать число

STA     0B01

Записать результат по адресу 0В01

HTL

Прервать выполнение программы

При записи программ все числа представляются в шестнад­цатеричной системе счисления.

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

Программа 1 (размещение по адресам памяти)

Адрес

Число

Комментарий

0800

3A

Код команды LDA

0801

00

Младший байт адреса

0802

0B

Старший байт адреса

0803

2F

Код команды CMA

0804

32

Код команды STA

0805

01

Младший байт адреса

0806

0B

Старший байт адреса

0807

76

Код команды HLT

 

В программе 1 используется прямой способ адресации. Приведем аналогичную программу с косвенной адресацией (программа 2).

 

Программа 2 (общий вид записи)

Адрес

Машинный код

Мнемокод

Комментарий

0800

21  00   0B

LXI H  0B00

Записать в регистры H, L число 0В00.

0803

MOV   A, M

Получить число из адреса указанного в регистрах H, L.

0804

2F

CMA  

Инвертировать число в аккумуляторе.

0805

23

INX   H

Увеличить на 1 число в регистрах H, L.

0806

77

MOV   M, A

Записать число из аккумулятора по адресу указанному в регистрах H, L. (0В01)

0807

76

HLT

Прервать выполнение программы.

 

5. Задание для домашней подготовки

1.     Изучите устройство УМК и порядок работы с ним.

2.     Ознакомьтесь с языком программирования и структурой команд МП БИС КР58ОВМ80.

3.     Изучите команды пересылки и загрузки, команды арифметических и логических операций.

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

 

                                                                                                 Таблица 2

Команда записанная по адресу 0803

Число записанное по адресу 0В00.

Число записанное по адресу 0В01.

CMA

ADD  A

SUB  A

ANA  A

XRA  A

ORA  A

CMP  A

INR  A

DCR A

 

 

 

Примечание по адресу 0В00 запишите число соответствующее вашему порядковому номеру в журнале.

 Разработайте программы:

 Программа 3: увеличение на 5 числа, записанного по адресу 0В00, и записи  результата по адресу 0В01 (программа 3);

 Программа 4: сложение чисел, записанных по адресам 0В00 и 0В01, и запись результата по адресу 0В02 (программа 4);

Программа 5: сравнение чисел, записанных по адресам 0В00 и 0В01, и записи большего  из них в ячейку по адресу 0В02 (программа 5).

 

6. Экспериментальная часть

 Работа с массивом данных

1.     Запишите по адресу 0В00 число 1.

2.     Запишите по адресу 0В01 число 2.

3.     Вычислите контрольную сумму и записать ее по адресу 0В02.

4.     Вычислите новую контрольную сумму и запишите ее по адресу 0В0З и т. д.

4.Последняя контрольная сумма вычисляется для массива 0В00 ¸06. Чему она равна?

5.     Перенесите сформированный массив в область памяти с начальным адресом 0В50.

6.     Определите контрольную сумму сформированного массива.

7.     Запишите константу (14)10 в область памяти 0В07 ¸ 0В0F.

8.     Определите контрольную сумму этого массива.

9.     Запишите полученную контрольную сумму в регистр В.

 

 Запись и выполнение простых программ

Задание 1. Исследуйте программу 1.

Порядок выполнения задания:

1.     Запишите программу 1 в ОЗУ.

2.     Запишите по адресу 00 число.

3.     Осуществите пуск программы с адреса 0800.

4.     Проверьте результат выполнения программы путем вывода на дисплей числа, записанного по адресу 0В01 (предварительно нажмите кнопку "СБ").

5.     Исследуйте процесс выполнения команд в программе 1 по машиным циклам. Заполните таблицу.

Адрес

Команда

Циклы

1

2

3

4

5

 

 

 

 

 

 

 

 

6.     Заменяя в программе 1 команду СМА на команды, приведенные в п.4 домашнего задания, исследуйте результаты их выпол­нения.

Задание 2. Исследуйте программу 2. Порядок выполнения, задания тот же.

Задание 3. Исследуйте программу 3.

Порядок выполнения задания:

1.     Введите программу.

2.     Осуществите пуск и проверьте результат ее выполнения по числу, записанному по адресу01 при числе FЕ, записанному по адресу 0В00.

Задание 4. Исследуйте программу 4.

Порядок выполнения задания:

1.     Введите программу.

2.     Проверьте результат выполнения программы по числу, записанному по адресу 0В02,  записав по адресам 0В00 и 01 соответственно числа 0В и В0.

Задание 5. Исследуйте программу 5.

Порядок выполнения задания:

1.     Введите программу.

2.     Запишите по адресам 0В00 и 0В01 исследуемые числа.

3.     Осуществите пуск и проверьте результат выполнения программы.

 

7.     Содержание отчета

Отчет должен содержать:

1.     Результаты выполнения задания для домашней подготовки.

2.     Результаты выполнения и проверки пунктов экспериментальной части.

 

8.     Контрольные вопросы

 

1.     Какие машинные циклы Вы знаете?

2.     Как определить время выполнения программы?

3.     Какие способы адресации операндов в памяти Вы знаете?

4.     Преобразуйте число 79 из десятичной системы счисления в двоичную, а затем в шестнадцатеричную.

5.     Как выполняются основные рабочие процедуры в УМК?

6.     Как исследовать процесс выполнения команды по циклам, используя УМК?

7.     Определите время выполнения программы 1.

8.     Преобразуйте число 34 из десятичной системы счисления в двоичную, а затем в шестнадцатеричную.

9.     Определите время выполнения программы 2.

10. Преобразуйте число 84 из десятичной системы счисления в двоичную, а затем в шестнадцатеричную.

11. Определите время выполнения программы 3.

12. Преобразуйте число 63 из десятичной системы счисления в двоичную, а затем в шестнадцатеричную.

13. Определите время выполнения программы 4.

14. Составьте программу записи числа 17 в регистр В и пересылки числа из регистра В в регистр С.

 

 


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

 

   Реализуется умножение «в столбик». Множимое вводится с внешнего устройства с адресом 0 и помещается в регистровую пару DE. Множитель вводится с внешнего устройства с адресом 1 и остается в аккумуляторе. Счетчик числа разрядов выполнен на регистре С. Произведение получается в регистровой паре HL и побайтно выводится на внешние устройства с адресами 2 и 3.

Программа умножения UMN.ASM

 

         jmp umn      ; безусловный переход на начало программы умножения

 

         .org h'10      ; адрес начала программы 16

umn:  lxi d,0          ; обнуление регистров множимого

         in 0             ; ввод множимого с внешнего устройства 0

         mov e,a       ; ввод множимого в DE

         in 1             ; ввод множителя с внешнего устройства 1

         lxi h,0 ; обнуление регистров произведения HL

         mvi c,8        ; загрузка счетчика числа циклов

m1:    dad h          ; логический сдвиг на разряд влево частного произведения

         rlc               ; сдвиг влево на разряд множителя

         jnc m2         ; пропуск сложения, если бит равен 0

         dad d          ; получение частного произведения

m2:     dcr c          ; декрементирование счетчика

         jnz m1         ; повторение операций частных произведений

         mov a,h ;

         out 2           ; вывод старшего байта произведения

         mov a,l        ;

         out 3           ; вывод младшего байта произведения

         hlt

         .end

 

Листинг программы умножения после ассемблирования UMN.LST

 

          адрес

строка          код           текст исходной программы

000001 0000 C31000           jmp umn

000002 0003                 

000003 0010                          .org h'10

000004 0010                         

000005 0010 110000     umn: lxi d,0              ; обнуление регистров множимого

000006 0013 DB00                in 0                  ; ввод множимого с внешнего устройства 0

000007 0015 5F                     mov e,a            ; ввод множимого в DE

000008 0016 DB01                in 1                  ; ввод множителя с внешнего устройства 1

000009 0018 210000             lxi h,0               ; обнуление регистров произведения HL

000010 001B 0E08                mvi c,8             ; загрузка счетчика числа циклов

000011 001D 29             m1: dad h                ; логический сдвиг на разряд влево

000012 001E                                       ; частного произведения

000013 001E 07                     rlc                    ; сдвиг влево на разряд множителя

000014 001F D22300           jnc m2             ; пропуск сложения, если бит равен 0

000015 0022 19                     dad d               ; получение частного произведения

000016 0023 0D             m2: dcr c                 ; декрементирование счетчика

000017 0024 C21D00           jnz m1              ; повторение операций частных произведений

000018 0027 7C                    mov a,h 

000019 0028 D302                out 2                ; вывод старшего байта произведения

000020 002A 7D                    mov a,l

000021 002B D303                out 3                ; вывод младшего байта произведения

000022 002D 76                    hlt

000023 002E                          .end

M1      =001D 

M2      =0023 

UMN     =0010 

 

         Примечание: последние 3 строки отражают адреса, которым соответствуют метки

 

Объектный файл UMN.OBJ

 

:03000000C310002A

:10001000110000DB005FDB012100000E082907D280

:0E0020002300190DC21D007CD3027DD3037690

:00000001FF

 

   Подчеркнуты адреса ячеек памяти (каждая строка имеет по 16 адресов).

   Жирным шрифтом выделено содержимое ячеек памяти.

   Остальное является служебной информацией для работы программатора.


Приложение 2.  Система команд микропроцессора КР580ВМ80

 

Обозначение

Содержание

Обоз-начение

Содержание

 

 

 

 

 

 

 

 

 

 

 

<B2>

<B3>

DDD

SSS

Код

Обозначение регистра.

C

Z

S

P

V

(R)

[(Di Di+1)]

 

L

"

V

(Am)

CK

УC

¬

Признак наличия переноса из 7-го разряда.

Признак нулевого результат.

Признак старшего разряда результата Признак четности.

Признак наличие переноса из 3-го разряда.

000

001

010

011

100

101

110

111

В

C

D

E

H

L

M (память)

A (аккумулятор)

Содержимое регистра

Содержимое ячейки памяти с адресом

(Di Di+1)

Логическое «И»

Исключение «ИЛИ»
Логическое «ИЛИ»

m-й бит содержимого аккумулятора (m=0¸7)

Счетчик команд

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

Пересылка

Второй байт команды

Третий байт команды

Код регистра приемника

Код регистра источника

Регистр признаков

Разряды

7

6

5

4

3

2

1

0

Признаки

S

Z

0

V

0

P

1

C

Груп-па

Мнемокод

Код команды

nв

nт

Выполняемые действия

Признаки

Z

S

C

P

Арифметические и логические операции.

ADD R

10000SSS

1

4/7

(A) ¬ (A) + (R)

+

+

+

+

ADC R

10001SSS

(A) ¬ (A) + (R) + (C)

+

+

+

+

SUB R

10010SSS

(A) ¬ (A) – (R)

+

+

+

+

SBB R

10011SSS

(A) ¬ (A) – (R) – (C)

+

+

+

+

ANA R

10100SSS

(A) ¬ (A) L (R)

+

+

0

+

XRA R

10101SSS

(A) ¬ (A) " (R)

+

+

0

+

ORA R

10110SSS

(A) ¬ (A) V (R)

+

+

0

+

CMP R

10111SSS

(A)–(R);если(A)=(R),то z=1; если(A)<(R),то c=1

+

+

+

+

ADI

11000110

C6

2

7

(A) ¬ (A) + <B2>

+

+

+

+

ACI

11001110

CE

(A) ¬ (A) + <B2> + (C)

+

+

+

+

SUI

11010110

D6

(A) ¬ (A) – < B2>

+

+

+

+

SBI

11011110

DE

(A) ¬ (A) – <B2> –  (C)

+

+

+

+

ANI

11100110

E6

(A) ¬ (A) L <B2>

+

+

0

+

XRI

11101110

EE

(A) ¬ (A) " <B2>

+

+

0

+

ORI

11110110

F6

(A) ¬ (A) V <B2>

+

+

0

+

CPI

11111110

FE

(A)–<B2>;если(A)= <B2>,то z=1; если(A)< <B2>,то c=1

+

+

+

+

DAD B

00001001

09

1

10

(H)(L) ¬ (B)(C) + (H)(L)

+

DAD D

00011001

19

(H)(L) ¬ (D)(E) + (H)(L)

+

DAD H

00101001

39

(H)(L) ¬ (H)(L) + (H)(L)

+

DAD SP

00111001

49

(H)(L) ¬ (H)(L) + (УC)

+

CMA

00101111

29

1

4

(A) ¬ (A)

 

 

 

 

 

 

 

 

Группа

Мнемокод

Код команды

nв

nт

Выполняемые действия

Признаки

Z

S

C

P

Команды сдвига.

RLC

00000111

07

1

4

Dm®Dm+1, D7®D0, D7®C

+

RRC

00001111

0F

Dm+1®Dm, D0® D7, D0®C

+

RAL

00010111

17

Dm®Dm+1, D7®C, C®D0

+

RAR

00011111

1F

Dm+1®Dm, D0®C, C®D7

+

Команды обмена

XCHG

11101011

EB

1

4

(H)¨(D), (L)¨(E)

НЕ       МЕНЯЮТ       ПРИЗНАКОВ

XTHL

11100011

E3

1

18

(L)¬®[УC], (H)¬®[УC+1]

Операции пересылки и загрузки.

STA

00110010

32

3

13

(A) ® [<B3><B2>]

LDA

00111010

3A

[<B3><B2>] ® (A)

LHLD

00101010

2A

3

16

[<B3><B2>] ® (L) [<B3><B2>+1] ® (H)

SHLD

00100010

22

(L) ® [<B3><B3>],

(H) ® [<B3><B2>+1]

MVI R

00DDD110

2

7/10

<B2> ® (R)

LXI (B,D,H)

00DDD001

3

10

<B2> ® (C,E,L),

<B­3> ® (B,D,H)

PCHL

11101001

E9

1

5

(H)(L) ® (CK)

SPHL

11111001

F9

(H)(L) ® (УC)

MOV R1,R2

01DDDSSS

1

5/7

(R2) ® (R1)

STAX  B

00000010

02

1

7

(A) ® [(B) (C)]

STAX  D

00010010

12

(A) ® [(D) (E)]

LDAX  B

00001010

0A

[(B) (C)] ® (A)

LDAX  D

00011010

1A

[(D) (E)] ® (A)

Операции инкремента декремента.

INR R

00DDD100

1

5/10

(R) +1 ® (R)

+

+

+

DCR R

00DDD101

(R) –1 ® (R)

+

+

+

INX (B,D,H)

00DDD011

(B,D,H) (C,E,L) +1® ®(B,D,H) (C,E,L)

НЕ  МЕНЯЮТ  ПРИЗНАКОВ

DCX (B,D,H)

00DDD011

(B,D,H)(C,E,L)-1 ® ®(B,D,H)(C,E,L)

Операции переходов.

JMP

11000011

C3

3

10

<B3><B2>®(CK)

JNZ

11000010

C2

Если z=0

ТО

[<B3><B2>] ® (CK)

ИНАЧЕ

(CK) = (CK) +3

JZ

11001010

CA

Если z=1

JNC

11010010

D2

Если c=0

JC

11011010

DA

Если c=1

JPO

11100010

E2

Если p=0

JPE

11101010

EA

Если p=1

JP

11110010

F2

Если s=0

JM

11111010

FA

Если s=1

 

 

 

 

 

 

 

 

 

 

 

Груп-па

Мнемокод

Код команды

nв

nт

Выполняемые действия

Признаки

Z

S

C

P

Операции вызова подпрограмм

CALL

11001101

CD

3

17

(CK) ® [УC-1][УC-2], <B3><B2>®(CK),

(УC)=(УC)-2

НЕ  МЕНЯЮТ  ПРИЗНАКОВ

CNZ

11000100

C4

3

11/17

Если z=0

 ТО  (CK) ® [УС-1][УС–2]; <B2><B3>®

( CK);  (УС)=(УС) – 2;  иначе

(CK)=(CK)+3

nт =11 при отсутствии перехода и

nт=17 при переходе

CZ

11001100

CC

Если z=1

CNC

11010100

D4

Если c=0

CC

11011100

DC

Если c=1

CPO

11100100

E4

Если p=0

CPE

11101100

EC

Если p=1

CP

11110100

F4

Если s=0

CM

11111100

FC

Если s=1

Возврат из подпрограмм

RET

11001001

C9

1

10

[УC][УC+1] ® (CK),

 C)= (УC) + 2

НЕ   МЕНЯЮТ

 ПРИЗНАКОВ

RNZ

11000000

C0

Если z=0

       ТО

C][УC+1]® ®(CK), (УC)=(УC) + 2,       ИНАЧЕ

(CK)=(CK)+1;

nT =11 при возврате из подпрограммы

RZ

11001000

C8

Если z=1

RNC

11010000

D0

Если c=0

RC

11011000

D8

Если c=1

RPO

11100000

E0

1

5/11

Если p=0

RPE

11101000

E8

Если p=1

RP

11110000

F0

Если s=0

RM

11111000

F8

Если s=1

Операции со стеком.

PUSH

(B,D,H)

11SSS101

1

11

(B,D,H)®[УC–1], (C,E,L) ® [УC-2] (УC)=(УC)-2

НЕ  МЕНЯЮТ  ПРИЗНАКОВ

PUSH

PSW

11110101

F5

(A)®[УC-1], (F) ® [УC–2] (УC) = (УC) – 2

POP (B,D,H)

11DDD001

1

10

[УC]®(C,E,L);[УC+1]®(B,D,H); (УC) = (УС)+2

POP

PSW

11110001

F1

 

[УC] ® (F), [УC+1] ® (A) (УC) = (УС)+2

+

+

+

+

Ввод - вывод

IN

11011011

DB

2

10

(УВB)®(A),<B2>–номер(УBB)

НЕ  МЕНЯЮТ  ПРИЗНАКОВ

OUT

11010011

D3

 

(A)®(УBB),<B2>–номер(УBB)

Операции управления

STC

00110111

37

1

 

4

1 ® (C)

1

CMC

00111111

3F

 

(Ĉ) ® (C) инверсия С

+

EI

11111101

FD

 

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

НЕ  МЕНЯЮТ  ПРИЗНАКОВ

DI

11110011

F3

 

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

NOP

00000000

00

 

Холостая операция

HLT

01110110

76

7

Остановка

RST N

11AAA111

1

11

(CK)®C-1][УС –2],

 C) ®C) – 2 0000000000ААА000 ® (CK)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перейти: /Главная/ CBuild/ JavaScript 1.2-5.6/ Delifi6/ I2C контроллеры/ AVR контроллеры/ ПЛИС/ AHDL/ VHDL/
LPT EPP/ LPT ECP/ PCI/ COM port/ I2C/ RS-232/
Рейтинг@Mail.ru Rambler's Top100 Rambler's Top100 Rambler's Top100    
Используются технологии uCoz