1. Основные правила составления программ на
Ассемблере........ 5
3. Учебный
микропроцессорный комплект (УМК).................................... 19
4.2.
Изучение УМК и правил составления простых программ (Л.Р.2).............................. 23
Приложение 2.
Система команд микропроцессора КР580ВМ80......... 34
Применение микропроцессоров (МП) в радиотехнической аппаратуре переносит центр
тяжести процесса проектирования на разработку прикладных программ, реализующих
алгоритм функционирования аппаратуры с МП. Стоимость разработки программного
продукта может составлять до 90% общей стоимости проекта.
В настоящее время программирование МП
ведется на языке Ассемблера или языке высокого уровня. Собственно
ассемблирование может выполняться вручную или с привлечением соответствующей
программы. Ручное ассемблирование, т.е. перевод команд (операторов) в машинные
коды, можно рекомендовать лишь на этапе начального обучения проектированию прикладных
программ, так как процесс этот трудоемок, а вероятность ошибок велика.
Язык Ассемблера относится к
машинно-ориетированным языкам низкого уровня. Каждой команде языка Ассемблера
соответствует, как правило, машинная команда. Каждый тип МП имеет свою систему
команд и, следовательно, свой язык Ассемблера. Команды, адреса и данные
записываются в виде буквенно-цифровых символов. Мнемонические обозначения
команд обычно легко ассоциируются с реально выполняемыми действиями (в англоязычном
написании). Практика показывает, что адаптация к языку Ассемблера происходит
быстро. После составления нескольких простых программ мнемонические обозначения
наиболее употребительных команд запоминаются. Написанная на Ассемблере
программа переводится на машинный язык с помощью транслирующей программы,
называемой также Ассемблер. При этом проводится проверка синтаксиса языка с
указанием ошибок, которые необходимо исправить. Программирование на Ассемблере
позволяет создавать максимально эффективные с точки зрения быстродействия и потребного
объема памяти программы.
Существенное повышение производительности
труда при проектировании прикладных программ дает использование языков высокого
уровня, специально приспособленных для программирования МП. Являясь
машинно-независимыми, они позволяют весь процесс получения программы в машинных
кодах свести к трансляции (переводу) с одного представления в другое. С помощью
специальной компилирующей программы
производится трансляция с языка высокого уровня на язык Ассемблера и далее с помощью Ассемблера
- в машинные коды. Каждому оператору языка высокого уровня соответствует 5 - 10
и более команд Ассемблера, что, очевидно, облегчает программирование. Поскольку
трансляторы создаются для широкого круга программ, то, естественно,
осуществляемый ими перевод не позволяет достичь той же эффективности, как при
программировании на Ассемблере. Более того,
окончательная отладка программы ведется обычно на Ассемблере. Из языков высокого уровня последнее время широко используется язык СИ.
Теоретические основы
использования микропроцессорных устройств излагаются в курсе «Цифровые
устройства и микропроцессоры». Практические навыки составления программ на
Ассемблере отрабатываются студентами в процессе практических занятий и
лабораторных работ. Лабораторные работы
предусматривают создание программ на языке Ассемблера с последующей их
отладкой.
Лабораторный практикум на кафедре РПУ организован в настоящее время в двух вариантах либо на базе «Учебных микропроцессорных комплектов» (УМК), либо программных средств отладки в дисплейном классе кафедры.
Целью
данного учебного пособия является методическое обеспечение этих двух вариантов
выполнения лабораторных работ.
Микропроцессор работает только с двоичными
кодами. Среди совокупности этих кодов имеется определенная группа кодов, каждый
из которых может «заставить» микропроцессор
выполнить определенные действия (операции). Такой
код часто называется кодом команды и, как правило, определяет одну команду из
системы команд микропроцессора. Код любой команды представляется в запоминающем
устройстве двоичным восьмиразрядным числом (байтом). Всего с помощью байта можно формировать 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 |
|
|
|
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 |
|
Система
команд микропроцессора – это полный
перечень элементарных действий, которые может выполнить микропроцессор.
Управляемый командами микропроцессор выполняет очень простые действия, однако
с помощью этих действий (команд) можно запрограммировать любую
сложную операцию.
Проектировщику необходимо запомнить весь перечень команд и
хорошо представлять действия, которые будет выполнять
микропроцессор при их обработке.
Программная
модель системы, построенной на базе микропроцессора серии КР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 — в регистре указателя стека.
Команды
микропроцессора делятся на группы: команды пересылки и загрузки данных, команды
обмена данными, арифметические команды, команды поразрядной обработки данных,
команды передачи управления, команды управления микропроцессором. Команды могут
быть длиной один, два или три байта. При описании команд (ниже) байты разделены
штрихами.
Команды пересылки и
загрузки данных:
- 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), двоичный код команды
или двоичный код содержащий символы источника или приемника данных, число
байтов в команде , число тактов, выполняемые действия, характер изменения битов
регистра признаков.
Разработка и отладка
микропроцессорных программ ведется с помощью различных отладочных средств: от
оценочных учебных модулей до универсальных аппаратно-программных комплексов.
Последнее время фирмами разработчиками МП поставляются аппаратно-программные
комплексы, сопрягаемые с персональными компьютерами. Они содержат ряд программ
и плату с МП, подключаемую к последовательному или параллельному порту ЭВМ
(встречаются оба варианта). При этом реализуются следующие возможности:
- ассемблирование исходного
файла;
- моделирование на
программном уровне (симуляция) исходного файла;
- моделирование на
аппаратном уровне (эмуляция) исходного файла.
В лабораторном практикуме
плата с МП отсутствует, поэтому обучение проводится на программном уровне.
Исходный файл прикладной
программы пишется в любом текстовом редакторе и ему присваивается расширение .asm. Запись программы на Ассемблере требует соблюдения
определенных правил. Программа пишется в виде последовательности команд. Каждая
команда записывается в одной строке и имеет четыре поля:
МЕТКА
ОПЕРАЦИЯ ОПЕРАНД КОММЕНТАРИЙ
Не
обязательно использовать все поля, но они должны быть в указанном порядке.
МЕТКА - это символическое имя адреса команды, находящейся
в данной строке; обычно метки придаются командам, к которым предусматривается
обращение в процессе выполнения программы. Метка начинается с буквы и ее длина
неограниченна, но различаются только первые восемь символов. Нельзя внутри
метки использовать пробел. Нельзя в качестве меток записывать имена регистров,
коды команд и другие зарезервированные сочетания (например, А, М, СМР и т.п.,
но А2, ММ, СМР9 можно). В одной программе не должно быть двух и более
одинаковых меток. Разделителем между меткой и операцией является двоеточие.
ОПЕРАЦИЯ - в этом поле содержатся мнемокоды команд или директивы ассемблера, которые
описываются ниже. Разделителем между кодом команды и операндами является пробел.
ОПЕРАНД - это символические имена регистров, адресов, меток
или константы. Целочисленные константы могут быть определены в двоичной (префикс
b, b’11101101), шестнадцатеричной (префикс h, h’2a3f) или
десятеричной (префикс отсутствует) системах счисления. При наличии двух
операндов разделителем служит запятая. У
некоторых команд операнды отсутствуют (RRC, NOP и др.) и поле операндов
остается пустым. Операнд может быть выражением. На начальном этапе обучения
программированию на Ассемблере их можно не использовать. С правилами
составления выражений можно познакомиться в литературе.
КОММЕНТАРИЙ начинается с точки
с запятой. Если строка начинается
с точки с запятой, то вся
строка считается комментарием, и в ней могут присутствовать любые символы в
любой последовательности. Комментарий является вспомогательным средством,
используемым для пояснения и документирования программ. Не следует пренебрегать
комментариями, так как через короткое время программа становится непонятной
даже ее автору.
В приложении
1 приведен пример записи программы на Ассемблере.
Директивы
Ассемблера (или псевдокоманды) управляют работой транслятора и не переводятся в
машинные коды. Используемый в лаборатории транслятор распознает 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,h’ab,’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.
Вызов транслятора с языка Ассемблера осуществляется командой 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, который в реальных условиях с помощью
программатора записывается в ПЗУ, в данном случае используется симулятором.
Программа симуляции
(моделирования) вызывается командой 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);
- выполнять программу в
пошаговом режиме, отмечая изменения содержимого регистров и памяти;
- для режима непосредственного выполнения
программы использовать точки останова на наиболее характерных командах.
УМК состоит из следующих
составных частей: микроЭВМ, пульта оператора, блока питания.
|
Блок питания
+ 5 В
220 В
+12В
- 5 в -5 В
Рис.3. Структурная схема УМК
МикроЭВМ является основной составной частью и управляет работой всего УМК. Все обращения к памяти, операции ввода – вывода, вычисления выполняются микроЭВМ или ею же инициируются.
Пульт
оператора предназначен для взаимодействия оператора с микроЭВМ.
Блок
питания обеспечивает постоянными стабилизированными напряжениями микроЭВМ,
пульт, а также макетную плату..
МикроЭВМ
состоит из операционного устройства (ОУ) постоянного запоминающего
устройства (ПЗУ), оперативного запоминающего
устройства (ОЗУ) и устройства пошагового выполнения
программ.
Пульт оператора
состоит из клавиатуры, шестиразрядного дисплея,
световой индикации и управляющих кнопок
сброс "СБ",
прерывание "ПР",
шаг "ШГ",
а также переключателей работа/шаг "РБ/ШГ" и команда/цикл "КМ/ЦК"
(см. рис. 1).
Основой микроЭВМ является ОУ, реализованное на базе МП
КР580ВМ80, которое производит все операции по
обработке информации Исходным
состоянием ОУ является чтение информации по нулевому адресу ПЗУ. ОУ принимает это состояние после нажатия управляющей кнопки "СБ" на пульте оператора.
Информация о состоянии ОУ фиксируется в регистре состояния в начале каждого
машинного цикла.
В ПЗУ
записана программа "Монитор", обеспечивающая
ввод информации с клавиатуры пульта оператора и
вывод ее на дисплей.
Программа "Монитор" занимает 1 кбайт ПЗУ и использует последние 54
ячейки ОЗУ, еще 1 кбайт зарезервирован зa
пользователем. ОЗУ используется для хранения программ
пользователя и имеет емкость 1
кбайт.
Устройство пошагового выполнения программ переводит ОУ в состояние "Ожидание" после выполнения очередного шага. Возможны
два пошаговых режима работы: покомандный шаг и поцикловый шаг. Вызов пошагового режима
работы осуществляется переключателем "РБ/ШГ", выбор величины шага – переключателем "КМ/ЦК". Для последующего шага необходимо
нажать кнопку "ШГ",
при этом после выполнения очередного шага на световой индикации отображается
состояние адресной шины, шины данных и
регистра состояния ОУ в двоичном коде.
Выполнение программы может быть остановлено нажатием управляющей кнопки "ПР".
При этом состояния всех регистров
ОУ сохраняется в ОЗУ, откуда
они опять могут быть загружены
в ОУ и выполнение программы продолжится, начиная с точки останова.
Внешний вид лицевой панели УМК отображен на pис. 4.
1
– индикация шины адреса; 2 – индикация шины данных; 3 – индикация регистра
состояний; 4 – СБ ( сброс); 5 – ПР ( прерывание); 6 – ШГ ( шаг); 7 – РБ/ШГ ( работа / шаг); 8 – КМ/ЦК (
команда / цикл); 9 – разъём для подключения макетной платы.
Цель работы - изучение правил записи прикладных
программ с использованием директив Ассемблера, ознакомление с программами Ассемблера
и симулятора и приобретение навыков работы
с кросс-средств отладки.
Подготовка к
работе
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 подготовки к работе, результаты исправления примеров с
ошибками (ошибочная и исправленная строка), результаты отладки и моделирования
составленных программ.
Цели работы:
1. Изучение устройства и
принципов функционирования УМК.
2. Освоение базовых рабочих
процедур.
3. Закрепление навыков
программирования на языке Ассемблер.
1. Устройство и принцип работы УМК
Устройство и принцип работы
УМК описаны в разделе 3. Подробнее рассмотрим только функционирование
устройства пошагового выполнения программы. Устройство пошагового выполнения программы переводит ОУ в состояние ожидания после выполнения очередного шага. Вызов пошагового режима работы
осуществляется переключателем "РБ/ШГ", выбор величины шага переключателем "КМ/ЦК". Для последующего шага необходимо
нажать кнопку "ШГ".
При этом после выполнения
очередного шага на светодиодном индикаторе
отображается состояние адресной вины, шины данных
и регистра состояния ОУ в двоичном коде.
Команды выполняются по
машинным циклам (1 ¸ 5 циклов в команде). Имеется
десять типов машинных циклов и
соответственно десять слов состояния (см. табл.1).
Таблица 1.
Состояние ОУ |
Разряды регистра состояния ОУ |
|||||||
MEM |
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, Е – одноименные регистры,
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 ¸ 0ВFF константой 02
–
вычислите контрольную сумму
массива
Запуск программы пользователя
Последовательность нажатия
клавиш:
"СТ" "АДРЕС 1" "—" "АДРЕС 2" "—" "АДРЕС 3" "ВП",
где АДРЕС 1 –
начальный адрес программы,
АДРЕС 2 и АДРЕС 3 – адреса
выполнения прерывания программы (могут отсутствовать)
Состояние регистров микропроцессора при достижении адресов 2 и 3 сохраняется в ОЗУ, и управление передается программе "Монитор".
Пользователь может задать любую
директиву. Продолжение программы последует после
повторного нажатия клавиши
"ВП".
Внимание! Программа должна умещаться в пределах массива
0800 ¸ 0AFF (1 кбайт).
Пошаговое выполнение программы
Имеются две разновидности пошагового выполнения
программы: поцикловый режим "ЦК" и покомандный режим "КМ".
Для вызова пошагового режима:
-
установите переключатель "РБ/ШГ" в
положение "ШГ" (кнопка утоплена), при которой происходит подключение
световой индикации;
-
переключателем "КМ/ЦК" выберите один из режимов работы;
-
передайте управление выполняемой программе.
После этого световая
индикация отобразит начальный адрес программы, данные по этому
адресу и содержимое регистра состояния. Программа выполняется путем нажатия кнопки "ШГ".
Для выхода из пошагового режима установите
переключатель "РБ/ШГ"
в состояние "РБ" (кнопка отжата) и нажмите кнопку "ШГ".
Пример 6: запустите программу находящеюся в памяти ОЗУ(адреса 0800¸0807) в пошаговом режиме. Следите за световой
индикацией.
Прерывание выполнения программы
Для прерывания выполнения
программы необходимо нажать клавишу "ПР". После
этого пользователь может вызвать выполнение любой
из существующих директив. Выполнение прерванной
программы возможно, начиная с адреса останова или любого другого адреса.
4.
Запись и выполнение программы
4.
Микропроцессор БИС КР580ВМ80 имеет фиксированный набор команд. Программа
записывается последовательно в массив памяти ОЗУ
0800 ¸ 0АFF. Для записи данных исследуемых программ используют ячейки ОЗУ с адресами
0B00 ¸ 0BFF.
Система команд микропроцессора КР580ВМ80А приведена в Приложении 1.
Время выполнения команды измеряют в машинных тактах,
равных периоду синхронизации (0,5 мкс при
ƒт = 2 МГц).
Рассмотрим простейшую программу (программа 1), извлекающую число из ячейки памяти с
адресом 0В00, инвертирующую его и записывающую результат в адрес памяти 0В01.
Программа 1 (в
мнемокодах)
Мнемокод |
Комментарий |
LDA 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 |
7Е |
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).
1.
Запишите по адресу 0В00 число 1.
2.
Запишите по адресу 0В01 число 2.
3. Вычислите контрольную сумму и записать ее по
адресу 0В02.
4. Вычислите новую
контрольную сумму и запишите ее по адресу 0В0З и т. д.
4.Последняя контрольная сумма вычисляется для массива 0В00 ¸ 0В06.
Чему она равна?
5. Перенесите сформированный массив в область памяти с начальным адресом 0В50.
6. Определите контрольную сумму сформированного массива.
7. Запишите константу (14)10 в область
памяти 0В07 ¸ 0В0F.
8. Определите контрольную
сумму этого массива.
9. Запишите полученную контрольную сумму
в регистр В.
Запись
и выполнение простых программ
Задание 1. Исследуйте программу 1.
Порядок выполнения задания:
1. Запишите программу 1 в
ОЗУ.
2.
Запишите по адресу 0В00
число.
3.
Осуществите пуск
программы с адреса
0800.
4. Проверьте
результат выполнения программы путем вывода на дисплей числа,
записанного по адресу
0В01 (предварительно нажмите кнопку "СБ").
5. Исследуйте
процесс выполнения команд в программе 1 по машиным циклам. Заполните таблицу.
Адрес |
Команда |
Циклы |
||||
1 |
2 |
3 |
4 |
5 |
||
|
|
|
|
|
|
|
6. Заменяя
в программе 1 команду
СМА на команды,
приведенные в п.4 домашнего задания, исследуйте результаты их выполнения.
Задание 2. Исследуйте программу 2.
Порядок выполнения, задания тот же.
Задание 3. Исследуйте программу 3.
Порядок
выполнения задания:
1. Введите программу.
2. Осуществите пуск
и проверьте результат ее выполнения по числу, записанному по адресу 0В01 при числе FЕ, записанному
по адресу 0В00.
Задание 4. Исследуйте программу 4.
2. Проверьте результат выполнения программы по числу, записанному по адресу 0В02, записав по адресам 0В00 и 0В01 соответственно числа 0В и В0.
Задание 5. Исследуйте программу 5.
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 в регистр В и пересылки числа из регистра В в регистр С.
Реализуется
умножение «в столбик». Множимое вводится с внешнего устройства с адресом 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 адресов).
Жирным шрифтом выделено содержимое ячеек
памяти.
Остальное является служебной информацией для
работы программатора.
Обозначение |
Содержание |
Обоз-начение |
Содержание |
|||||||||||||||||||||
<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), <B3> ® (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/
Используются технологии uCoz
|