Комитет по образованию Правительства Санкт-Петербурга
Санкт-Петербургское государственное бюджетное профессиональное образовательное учреждение
«Колледж информационных технологий»
ОТЧЁТ
по учебной практике МДК 03.01
«Системное программирование»
Санкт-Петербург 2015г
Содержание
Лабораторная работа 16. 38
Лабораторная работа 1
Цель лабораторной работы
Изучение архитектуры микропроцессора КР580.
Содержание работы
Буфер данных |
Регистр-аккумулятор |
Регистр команд |
Дешифратор команд |
Буферный Регистр1 |
Регистр признаков (флагов) |
Буферный регистр 2 |
Блок АЛУ |
Блок десятичной коррекции значения регистра-аккумулятора |
Блок синхронизации и управления |
Содержимое ячеек ОЗУ |
Панель редактирования значения выбранной (текущей) ячейки ОЗУ мы; |
Панель редактирования значения содержимого выбранного регистра ения |
Используя справку к эмулятору МП-системы изучить структуру МП и описать его компоненты в виде:
< >Составить таблицу регистров, которые имеет МП:
Регистр
Назначение
Разрядность
Аккумулятор А
Регистр, в котором сохраняются непосредственные результаты выполнения арифметических и логических команд
8-разрядный
Адресный регистр, при косвенной адресации хранит 16-разрядный адрес основной памяти
16-разрядный
Функция счетчика команд
16-разрядный
Функция указателя стека
16-разрядный
F и A
Образование стандартного регистрового набора микропроцессора с аккумулятором
- разрядные
B, C, D, E
Регистры общего назначения
8-разрядные
Регистр флагов
8-разрядый
< >
Начало
Составить блок-схему функционирования МП во время выполнения команды сложения содержимого аккумулятора и регистра В, имеющую мнемоническое обозначение ADD B.
B = RGa |
A = RGb |
RGa + RGb = A |
Конец |
< >Составьте таблицу флагов:
Обозначение флага
Признак флага
Условие установки флагов
C (Carry)
Перенос
Наличие переноса (при сложении) или заема (при вычитании) из старшего разряда аккумулятора, иначе сбрасывается
M (Minus)
Отрицательный результат
Знаковый бит результата операции (седьмой разряд аккумулятора) равен 1, иначе сбрасывается
Z (Zero)
Признак нуля
Результат операции в аккумуляторе равен 0, иначе сбрасывается
P (Parity)
Паритет/четность
Результат операции в аккумуляторе содержит четное число единиц, иначе сбрасывается
AC (Auxiliary Carry)
Половинный (дополнительный) перенос
Наличие переноса из третьего разряда аккумулятора в четвертый, иначе сбрасывается.
Лабораторная работа 2.
Исследование команд прямой адресации
Цель лабораторной работы
Целью данной работы является ознакомление с командами микропроцессора КР580 для прямой адресации
Составим программу:
0000 3A LDAAh
0001 0A
0002 00
000332 STABh -загрузить содержимое аккумулятора в
0004 0B -ячейку памяти с адресом Bh
000500
0000 00
…
0009 00
000A10
Рисунок 1 – Ввод операндов при прямой адресации
|
Лабораторная работа 3.
Исследование команд непосредственной адресации
Цель лабораторной работы
Целью данной работы является ознакомление с командами микропроцессора КР580 для непосредственной адресации
Составим программу:
0000 26 MVIA, 20h
0001 20
0002 06 MVI B, 5h
0003 5
0004 26 MVI H, d1h
0005 D1
0006 FF RST 7
Рисунок 2 – Ввод операндов при непосредственной адресации
Рисунок 3 – Результат работы модели при непосредственной адресации
Лабораторная работа 4.
Исследование команд косвенной адресации
Цель лабораторной работы
Целью данной работы является ознакомление с командами микропроцессора КР580 для косвенной адресации
Составим программу:
0000 06 MVIB, 00h
0001 00
0002 0E MVI C, 0Ah
0003 0A
0004 0A LDAX B
0005 FF RST 7
…
000A 10
Рисунок 4 – Ввод операндов при непосредственной адресации
Рисунок 5 – Результат работы модели при непосредственной адресации
Лабораторная работа 5.
Исследование команд стековой адресации
Цель лабораторной работы
Целью данной работы является ознакомление с командами микропроцессора КР580 для стековой адресации.
Составим программу:
0000 06 MVIB, 10h
0001 10
0002 16 MVI D, 5Ah
0003 5A
0004 C5 PUSH B
0005 D5 PUSH D
0006 50 MOV D, B
0007 D1 POP D
0008 C1 POP B
0009 FF RST7
Данные помещаются в регистры В и D, после чего их содержимое посылается в стек. После этого производится обмен значениями между регистрами и значения регистров возвращаются из стека.
Лабораторная работа 6.
Пример программы для микропроцессора
Цель лабораторной работы
Целью данной работы является ознакомление с простейшими арифметическими действиями на микропроцессореКР580
Таблица 1 − Программа сложения двух однобайтных чисел
Адрес |
Код команды |
Метка |
Мнемокод |
Комментарий |
0000 |
AF |
- |
ХRА А |
Очистить аккумулятор |
0001 |
ЗЕ |
- |
MVI A, 38 |
Записать в аккумулятор число 5610 = 38h16 |
0002 |
38 |
|||
0003 |
06 |
- |
MVI B, A3 |
Записать в регистр В число 16310 = a3h16 |
0004 |
A3 |
|||
0005 |
80 |
- |
ADD 8 |
Сложить 38h16и a3h16 (5610 + 16310 = 21910 = db16) |
0006 |
E7 |
- |
RST 7 |
Прервать выполнениепрограммы |
Рисунок 6 – Простое сложение двух однобайтных чисел
Лабораторная работа № 7
ПрограммасложениядвуходнобайтныхчиселXиУ
Цель: Задачасостоитвтом, чтобы, выполнивзанесениеоднобайтныхчиселврегистрыАиВ, сложитьихипоместитьрезультатсложенияв аккумулятор.
Таблица - Программа PRG 1 сложения двух однобайтных чисел
12610(7E16) +8910(5916) = 21510 (D716)
Адрес |
Код команды |
Мнемокод |
Комментарий |
0000 |
AF |
ХRА А |
Очистить аккумулятор |
0001 |
ЗЕ |
MVI A, 38 |
Записать в аккумулятор |
0002 |
38 |
|
число X (12610 = 7E16) |
0003 |
06 |
MVI B, A3 |
Записать в регистр В |
0004 |
A3 |
|
число У (8910 = 5916) |
0005 |
80 |
ADD B |
Сложить Xи Y. Сложить 7E16и 5916 (12610 + 8910 = 21510 = D716) |
0006 |
32 |
STAadr |
Записать содержимое аккумулятора в |
0007 |
0D |
|
ячейку 000D |
0008 |
00 |
|
|
0009 |
E7 |
RST 7 |
Прервать выполнениепрограммы |
Рисунок7 До выполнения программы |
Рисунок8 После выполнения программы |
Лабораторная работа № 8
ПрограммавычитаниядвуходнобайтныхчиселXиУ
Цель: Выполнить самостоятельно (добавить скриншоты до и после выполнения программы) и записать результат вычислений (в двоичной и шестнадцатеричной системах счисления, разность записать в ячейку 000В):
19610(С416) – 6410(4016) = 13210 (8416)
Рисунок9 После выполнения программы
Таблица 1.3 - Программа PRG 2вычитания двух однобайтных чисел
Адрес |
Код команды |
Мнемокод |
Комментарий |
0000 |
AF |
ХRА А |
Очистить аккумулятор |
0001 |
ЗЕ |
MVI A,96 |
Записать в аккумулятор |
0002 |
C4 |
|
число X (19610 = С416) |
0003 |
06 |
MVI B, 25 |
Записать в регистр В |
0004 |
45 |
|
число У (6410 = 4016) |
0005 |
90 |
SUBB |
ВычестьXи YвычестьС416и 4016 (19610 -6410 = 13210 = 8416) |
0006 |
32 |
STA adr |
Записать содержимое аккумулятора в |
0007 |
0D |
|
ячейку 000D |
0008 |
00 |
|
|
0009 |
E7 |
RST 4 |
Прервать выполнениепрограммы |
Лабораторная работа № 9
Сложение массива однобайтных чисел
Цель:Массив однобайтных шестнадцатеричных чисел в 0050, 0051, 0052, 0053, 0054. Сам массив: 10610 (6A16) + 8410(5416) + 1610 (1016) + 3410 (2216) + 2110 (1516) + 16410 (A416) = 1A916(42510).
Таблица 1.3 – Программа PRG 3 сложения массива однобайтных чисел
Адрес |
Код команды |
Метка |
Мнемоника |
Комментарий |
0000 0001 0002 |
21 50 00 |
PRG 2: |
LXI H,0050 |
Загрузить в регистры HL, адрес первого слагаемого |
0003 0004 |
0E 06 |
|
MVI C, 04 |
Загрузить в регистр С количество слагаемых |
0005 |
AF |
|
XRA A |
Очистить аккумулятор |
0006 |
47 |
|
MOV B, A |
Очистить регистр В |
0007 |
86 |
M1: |
ADD M |
Прибавить к содержимому аккумулятора число из массива слагаемых |
0008 0009 000А |
D2 0D 00 |
|
INC M2 |
Еслипереносанет, то идти на М2 |
000В 000С |
04 B7 |
|
INR B
ORA A |
Увеличить содержимое регистра В на 1 Очистить флаг переноса |
000D |
23 |
M2: |
INX H |
Указать на следующий адрес слагаемого |
000E |
0D |
|
DCR C |
Уменьшить содержимое регистра С на 1 |
000F 0010 0011 |
C2 07 00 |
|
INZ |
Если не все слагаемые, то идти на M1 |
0012 |
FF |
|
RST 7 |
Прервать выполнение программы |
0050 |
6A |
|
|
Массив чисел |
0051 |
54 |
|
|
|
0052 |
10 |
|
|
|
0053 |
22 |
|
|
|
0054 |
15 |
|
|
|
0055 |
A4 |
|
|
Рисунок10 Программа до выполнения
Рисунок 11 Программа после выполнения |
Лабораторная работа № 10
Сложение двухбайтовых десятичных чисел
Цель: Выполнить операцию сложения двух двухбайтных чисел Результат сложения двух чисел поместить в ячейки 0020 и 0021.
Таблица 1 - Программа PRG 1 сложения двух десятичных чисел
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3E |
MVI A,8A |
Младший байт первого слагаемого заносится в аккумулятор5716®A |
0001 |
57 |
||
0002 |
06 |
MVI B,D8 |
Младший байт первого слагаемого заносится в аккумулятор2216®B |
0003 |
49 |
ORA H |
|
0004 |
80 |
ADD B |
Сложение A и B |
0005 |
32 |
STA adr |
Переместить байт из ячейки Bв ячейку Dс адресом 50 |
0006 |
50 |
MOV D,B |
|
0007 |
00 |
NOP |
|
0008 |
3E |
MVI A,D8 |
Старший байт первого слагаемого заносится в аккумулятор0916®A |
0009 |
09 |
- |
|
000А |
06 |
MVI B,D8 |
Старший байт второго слагаемого заносится в аккумулятор1116®B |
000В |
11 |
- |
|
000С |
88 |
ADC B |
Сложить |
000D |
32 |
STA adr |
Переместить байт из ячейки Bв ячейку Dс адресом 51 |
000E |
51 |
MOV D,C |
|
000F |
00 |
NOP |
|
0010 |
76 |
HTL |
остановка |
Данная программа выполняет операцию. 95716 + 112216 = 1A7916
(239110 + 438610 = 677710).
Рисунок 12До выполнения программы
Рисунок 13 После выполнения программы
Лабораторная работа № 11
Вычитание одинаковых по длине чисел
Цель: Выполнить операцию вычитания двух двухбайтных чисел.
Таблица 2 - Программа PRG 2 вычитания двух чисел.
Адрес |
Код |
Мнемоника |
Комментарий |
||
0000 |
3E |
MVI A,27 |
Младший байт первого слагаемого заносится в аккумуляторA416®A |
||
0001 |
A4 |
||||
0002 |
D6 |
SUI 83 |
Аккумулятор –1D16В аккумулятор |
||
0003 |
1D |
ADD E |
|||
0004 |
32 |
STA adr |
Переместить байт из ячейки Bв ячейку Dс адресом 50 |
||
0005 |
50 |
MOV D,B |
|||
0006 |
00 |
NOP |
|
||
0007 |
3E |
MVI A,21 |
Старший байт первого слагаемого заносится в аккумуляторD316®A |
||
0008 |
D3 |
LXI H,d16 |
Третий байт команды записывается в регистр Hрегистровой пары, второй байт – в регистр L |
|
|
0009 |
DE |
SBI 10 |
Аккумулятор - 10 |
|
|
000А |
88 |
- |
|
|
|
000В |
32 |
STAadr |
Переместить байт из ячейки Bв ячейку Dс адресом 50 |
|
|
000С |
51 |
MOVD,C |
|
||
000D |
00 |
NOP |
|
|
|
000E |
76 |
HLT |
остановка |
|
Данная программа выполняет операцию D3A4 16–881D 16=4A8716
(5418010–3484510= 1933510).
Рисунок 14 До выполнения программы
Рисунок 15 После выполнения программы |
Лабораторная работа № 12
Изучение алгоритма ветвления
Цель: Изучение алгоритма ветвления
Задание 1:
Выполнить на эмуляторе МП КР580 программу:
Вычислить значение у:
если х>10, то у=х-4. если х £10, то у=3х. х=ячейка [0020], у=ячейка [0021].
LDA 0020
CPI ,0A
JM {addr}
MOVB, A
SUI,04
STA 0021
HLT
{addr}:
MOVB,A
ADDB
ADDB
STA 0021
HLT
СОСТАВИТЬ БЛОК - СХЕМУ, ЛИСТИНГ (таблицу). СДЕЛАТЬ ПРОВЕРКУ ПРИ
Х=04, 0A, 0D.
Рисунок 16 Программа при х=4
Рисунок 17 Программа при х=10
Рисунок 18 Программа при х=13
Задание 2:
Выполнить на эмуляторе МП КР580 программу:
Вычислить значение у:
если х>12, то у=х-6. если х £12, то у=4х. =ячейка [0030], у=ячейка [0031].
СОСТАВИТЬ БЛОК - СХЕМУ, ЛИСТИНГ (таблицу). СДЕЛАТЬ ПРОВЕРКУ ПРИ
Х=03,0С,0E.
Рисунок 19Программ при х=3
Рисунок 20 Программа при х=12
Рисунок 21Программа при х=14
Лабораторная работа №13
Вывод текстовой информации на экран
Цель: изучение возможностей вывода информации на экран
Задание:
1.Вывести на экран монитора КР580 номер группы, свою фамилию и имя разными цветами.
Рисунок 22Вывод программына экран
2.Написать листинг полученной программы
адрес |
код команды |
метка |
мнемоника и операнд |
комментарии |
|
0000 |
3E |
|
MVI A,21 |
21 => A, A=21 |
|
0001 |
21 |
|
|
{цвет символа в Акк} |
|
0002 |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=21 |
|
0003 |
00 |
|
|
{цвет символа в порт монитора} |
|
0004 |
3E |
|
MVI A,33 |
33 => A, A=33 |
|
0005 |
33 |
|
|
{номер символа в Акк, 3->A} |
|
0006 |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=33 |
|
0007 |
00 |
|
|
{номер символа в порт монитора} |
|
0008 |
3E |
|
MVI A, 21 |
11 => A, A=11 |
|
0009 |
11 |
|
|
{цвет символа в Акк} |
|
000A |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=11 |
|
000B |
00 |
|
|
{цвет символа в порт монитора} |
|
000C |
3E |
|
MVI A, 32 |
32 => A, A=32 |
|
000D |
32 |
|
|
{номер символа в Акк, 2->A} |
|
000E |
D3 |
|
OUT 00 |
A->PORT 00,PORT 00=32 |
|
000F |
00 |
|
|
{номер символа в порт монитора} |
|
0010 |
3E |
|
MVI A, 61 |
61 => A, A=61 |
|
0011 |
61 |
|
|
{цвет символа в Акк} |
|
0012 |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=61 |
|
0013 |
00 |
|
|
{цвет символа в порт монитора} |
|
0014 |
3E |
|
MVI A,33 |
33 => A, A=33 |
|
0015 |
33 |
|
|
{номер символа в Акк, 3->A} |
|
0016 |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=33 |
|
0017 |
00 |
|
|
{номер символа в порт монитора} |
|
0018 |
3E |
|
MVI A, 11 |
11 => A, A=11 |
|
0019 |
11 |
|
|
{цвет символа в Акк} |
|
001A |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=11 |
|
001B |
00 |
|
|
{цвет символа в порт монитора} |
|
001C |
3E |
|
MVI A,2D |
2D => A, A=2D |
|
001D |
2D |
|
|
{номер символа в Акк, -->A} |
|
001E |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=2D |
|
001F |
00 |
|
|
{номер символа в порт монитора} |
|
0020 |
3E |
|
MVI A, 51 |
51 => A, A=51 |
|
0021 |
51 |
|
|
{цвет символа в Акк} |
|
0022 |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=51 |
|
0023 |
00 |
|
|
{цвет символа в порт монитора} |
|
0024 |
3E |
|
MVI A, 52 |
53 =>A, A=53 |
|
0025 |
53 |
|
|
{номер символа в Акк, S->A} |
|
0026 |
D3 |
|
OUT 00 |
A =>PORT 00,PORT 00=52 |
|
0027 |
00 |
|
|
{номер символа в порт монитора} |
|
0028 0029 002A |
3E 61 D3 00 |
|
MVI A,61
OUT 00
|
61 => A, A=61 {цвет символа в Акк} A =>PORT 00,PORT 00=61 {цвет символа в порт монитора} |
|
002B |
|||||
002C 002D 002E |
3E 76 D3 00 |
|
MVI A,61
OUT 00
|
76 => A, A=76 {номер символа в Акк, v->A} A =>PORT 00,PORT 00=61 {номер символа в порт монитора} |
|
002F |
|||||
0030 0031 0032 |
3E 31 D3 00 |
|
MVI A, 31
OUT 00
|
31 => A, A=31 {цвет символа в Акк} A =>PORT 00,PORT 00=31 {цвет символа в порт монитора} |
|
0033 |
|||||
0034 0035 0036 |
3E 69 D3 00 |
|
MVI A, 73
OUT 00
|
69 => A, A=69 {номер символа в Акк,i->A} A->PORT 00,PORT 00=73 {номер символа в порт монитора} |
|
0037 |
|||||
0038 0039 003A |
3E 71 D3 00 |
|
MVI A,71
OUT 00
|
71 => A, A=71 {цвет символа в Акк} A->PORT 00,PORT 00=71 {цвет символа в порт монитора} |
|
003B |
|||||
003C 003D 003E |
3E 72 D3 00 |
|
MVI A,70
OUT 00
|
72 => A, A=72 {номер символа в Акк, r->A} A =>PORT 00,PORT 00=70 {номер символа в порт монитора} |
|
003F |
|||||
0040 0041 0042 |
3E 21 D3 00 |
|
MVI A, 21
OUT 00
|
21 => A, A=21 {цвет символа в Акк} A =>PORT 00,PORT 00=21 {цвет символа в порт монитора} |
|
0043 |
|||||
0044 0045 0046 |
3E 69 D3 00 |
|
MVI A,75
OUT 00
|
69 =>A, A=69 {номерсимволавАкк, i->A} A =>PORT 00,PORT 00=75 {номер символа в порт монитора} |
|
0047 |
|||||
0048 0049 004A |
3E 31 D3 00 |
|
MVI A, 31
OUT 00
|
31 => A, A=31 {цвет символа в Акк} A =>PORT 00,PORT 00=31 {цвет символа в порт монитора} |
|
004B |
|||||
004C 004D 004E |
3E 64 D3 00 |
|
MVI A, 74
OUT 00
|
64 =>A, A=64 {номер символа в Акк, d->A} A =>PORT 00,PORT 00=74 {номер символа в порт монитора} |
|
004F |
|||||
0050 0051 0052 |
3E 41 D3 00 |
|
MVI A,41
OUT 00
|
41 => A, A=41 {цвет символа в Акк} A->PORT 00,PORT 00=41 {цвет символа в порт монитора} |
|
0053 |
|||||
0054 0055 0056 |
3E 6F D3 00 |
|
MVI A,69
OUT 00
|
6F => A, A=6F {номер символа в Акк, o->A} A =>PORT 00,PORT 00=69 {номер символа в порт монитора} |
|
0057 |
|||||
0058 0059 005A 005B
|
3E 6E D3 00 |
|
MVI A,6E OUT 00 |
76 => A, A=76 {номер символа в Акк, v->A} A =>PORT 00,PORT 00=6E {номер символа в порт монитора} |
|
|
|||||
|
|
||||
|
|
Лабораторная работа №14
Умножения целых чисел без знака
Цель: изучение возможностей МП для умножения целых чисел без знака
3210(2016)*1410(E16) = 44810(1C016)
Адрес |
Код команды |
Метка |
Мнемоника |
Комментарий |
0000 |
00 |
|
|
Не используется |
0001 |
1E |
|
MVI E,20h |
Записать в регистр E число 20h (3210) |
0002 |
20 |
|||
0003 |
0E |
|
MVI C,Eh |
Записать в регистр C число Eh(1410) |
0004 |
E |
|||
0005 |
AF |
|
XRA A |
Очистить аккумулятор |
0006 |
67 |
|
MOV H,A |
Очистить регистр Н |
0007 |
6F |
|
MOV L,A |
Очистить регистр L |
0008 |
57 |
|
MOV D,A |
Очистить регистр D |
0009 |
83 |
|
ADD E |
A = A + E |
000A |
C8 |
|
RZ |
Если А = 0, то выход |
000B |
AF |
|
XRA A |
Очистить аккумулятор |
000C |
81 |
|
ADD C |
A – множитель |
000D |
C8 |
|
RZ |
Если А = 0, то выход |
000E |
1F |
С1: |
RAR |
Арифметический сдвиг аккумулятора вправо |
000F |
D2 |
|
JNС С2 |
Флаг переноса не установлен(JUMPIFNOCARRY) |
0010 |
13 |
|||
0011 |
00 |
|||
0012 |
19 |
|
DAD D |
Сдвиг множимого влево |
0013 |
EB |
С2: |
XCHG |
Обменять пару регистров DE с парой HL (EXCHANGE) |
0014 |
29 |
|
DAD H |
Прибавить к паре регистров HL содержимое пары регистров H |
0015 |
EB |
|
XCHG |
Обменять пару регистров DE с парой HL (EXCHANGE) |
0016 |
B7 |
|
ORA A |
Логическое сложение «ИЛИ» аккумулятора. В данном случае очистить флаг переноса |
0017 |
C2 |
|
JNZ С1 |
Флаг нуля не установлен(JUMPIFNOTZERO) |
0018 |
0E |
|||
0019 |
00 |
|||
001A |
FF |
|
RST 7 |
Прервать выполнение программы |
Рисунок 23Программа до выполнения
Рисунок 24 Программа после выполнения
Лабораторная работа №15
Деление целых чисел без знака
Цель: изучение алгоритмов деление двух однобайтных чисел, составление и выполнение программы деления двух однобайтных чисел без знака.
Десятичная: 240/16=15
Шестнадцатеричная: F0 / 10 = F
209/11=19
D1/B=13
0000 |
11 |
DIVB: |
LXI D, 14A0 |
; Загрузка делимого и делителя в пару DE |
0001 |
А0 |
|
|
; |
0002 |
14 |
|
|
; |
0003 |
21 |
|
LXI H, 0008 |
;Загрузка счетчика в регистр Lи очистка регистра Н |
0004 |
08 |
|
|
; |
0005 |
00 |
|
|
; |
0006 |
0Е |
|
MVI C, 0 |
; Очистка регистра промежуточного остатка |
0007 |
00 |
|
|
; |
0008 |
F0 |
NXTB: |
MOV A, E |
; Загрузка делимого в аккумулятор |
0009 |
17 |
|
RAL |
; Смещение делимого влево на один бит |
000А |
5F |
|
MOV E, A |
; Пересылка делимого в регистр Е |
000В |
79 |
|
MOV A, C |
; Загрузка промежуточного остатка в А |
000С |
17 |
|
RAL |
; Смещение промежуточного остатка влево |
000D |
92 |
|
SUB D |
; Вычитание делителя от А |
000Е |
D2 |
|
JNC NOADD |
; Если С = 0 - переход на метку NOADD |
000F |
12 |
|
|
; |
0010 |
00 |
|
|
; |
0011 |
82 |
|
ADD D |
; Восстановление остатка |
0012 |
4F |
NOADD: |
MOV C, A |
; Пересылка промежуточного остатка в регистр С |
0013 |
3F |
|
CMC |
; Инверсия признака переполнения |
0014 |
7C |
|
MOV A, H |
; Запись доли в А |
0015 |
17 |
|
RAL |
; Смещение доли |
0016 |
67 |
|
MOV H, A |
; Сохранение доли |
0017 |
2D |
|
DCR L |
; Уменьшение регистра L |
0018 |
C2 |
|
JNZ NXTB |
; Организация цикла |
0019 |
08 |
|
|
; |
001А |
00 |
|
|
; |
001В |
7C |
|
MOV A, H |
; Пересылка младшего байта результата в А |
001С |
32 |
|
STA 0050 |
; Сохранение содержимого А в памяти по адресу 0020 |
001D |
30 |
|
|
; |
001E |
00 |
|
|
; |
001F |
79 |
|
MOV A, H |
; Пересылка старшего байта результата в А |
0020 |
32 |
|
STA 0051 |
; Сохранение содержимого А в памяти по адресу 0021 |
0021 |
31 |
|
|
; |
0022 |
00 |
|
|
; |
0023 |
CF |
|
RST1 |
; Прекращение выполнения программы |
Рисунок 25 До выполнения программы
Рисунок 26 После выполнения программы
Лабораторная работа № 16
Программирование арифметических задач на Ассемблере для микропроцессора К580
Цель лабораторной работы - рассмотреть особенности выполнения простейших арифметических операций над целыми числами без знака на МП, познакомиться с программированием в машинных кодах и мнемокодах, научиться пользоваться средствами управления и клавиатурой устройств.
1.Команды логического умножения
Цель: исследование команд логического умножения.
Программа PRG 3логическое умножение
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3E |
MVI A |
Загрузка регистра А непосредственно |
0001 |
FB |
|
Загрузка числа |
0002 |
06 |
MOV H, B |
Передать из регистра В в регистр Н. |
0003 |
2D |
|
Загрузка числа |
0004 |
A0 |
A0h |
Аккумулятор & |
0005 |
76 |
HLT |
Остановка |
Здесь выполняется операция логического умножения чисел:
Десятичная: 251&45
Шестнадцатеричная: FB&2D = 2D;
111110112(FB16) &001011012(2D16) = 001011012(2C16)
& |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
|
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
||
= |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
|
Рисунок 27 Перед выполнением программы
Рисунок 28 После выполнения программы
2Команды обнуления битов
Цель: исследование команд маскирования.
Программа PRG4маскирование
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
21 |
LXI H |
Загрузка регистровой пары |
0001 |
20 |
MOV В, В |
Из регистра В в В |
0002 |
00 |
|
|
0003 |
3E |
MVI А |
Загрузка регистра А непосредственно |
0004 |
43 |
|
Загрузка числа |
0005 |
36 |
MVI M |
Из регистра Е в Н |
0006 |
51 |
|
Загрузка числа |
0007 |
А6 |
ANA M |
Аккумулятор | память |
0008 |
76 |
HLT |
Остановка процессора |
С помощью байта-маски 10100012 (5116) сбрасывается 5-й биты байта 10000112 (4316). Здесь выполняется операция логического умножения чисел:
10100012 (5116) &10000112 (4316) = 101100012 (5116).
& |
|
1 |
1 |
1 |
0 |
0 |
0 |
1 |
|
1 |
0 |
0 |
0 |
0 |
1 |
1 |
|
= |
|
1 |
0 |
0 |
0 |
0 |
0 |
1 |
Рисунок 29 До выполнения программы
Рисунок 30 После выполнения программы
3 Команды логического сложения
Цель: исследование команд логического сложения.
Программа PRG 5логическое сложение чисел
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
21 |
LXI H |
Загрузка регистровой пары |
0001 |
20 |
MVI В, В |
Из регистра В в В |
0002 |
00 |
|
|
0003 |
3E |
MVIA |
Загрузка регистра А непосредственно |
0004 |
B3 |
|
Загрузка числа |
0005 |
36 |
MVIM |
Загрузка памяти непосредственно |
0006 |
5B |
|
Загрузка числа |
0007 |
B6 |
ORA M |
Аккумулятор | память |
0008 |
76 |
HLT |
Остановка процессора |
Здесь выполняется операция логического сложения чисел:
101100112 (B316) +010110112 (5B16) = 100112 (1316)
+ |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
|
= |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
Рисунок 31 Перед выполнением программы
Рисунок 32 После выполнения программы
4 Команды восстановления битов
Цель: исследование команд логического сложения.
Программа PRG 6маскирование
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3E |
MVI A |
Загрузка регистра А непосредственно |
0001 |
4С |
|
Загрузка числа |
0002 |
0E |
MVI C |
Загрузка регистра непосредственно |
0003 |
6С |
|
Загрузка числа |
0004 |
B1 |
ORA C |
Аккумулятор | регистр С |
0005 |
76 |
HLT |
Остановка процессора |
С помощью байта-маски 10010002 (4816) устанавливаются единицы в 5-омбайте11010002 (6816). Здесь выполняется операция логического сложения чисел:
11010002 (6816) +10010002 (4816)= 10010002 (4816)
+ |
|
1 |
0 |
0 |
1 |
0 |
0 |
0 |
|
1 |
1 |
0 |
1 |
1 |
0 |
0 |
|
= |
|
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Рисунок 33До выполнения программы
Рисунок 34 После выполнения программы
5 Инвертирование чисел
Цель: исследование команд инвертирования чисел.
Программа PRG 7инвертирование числа
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3E |
MVI A |
Загрузка регистра А непосредственно |
0001 |
85 |
|
Число |
0002 |
2F |
MVI L |
Загрузка регистра непосредственная |
0003 |
76 |
HLT |
Остановка процессора |
Здесь выполняется операция инвертирования числа
Не 100001012 (8516) = 001111012 (3D16)
не |
|
||||||||
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
|
|
|
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
|
Рисунок 35 До выполнения программы
Рисунок 36 После выполнения программы
6 Инвертирование флага переноса
Цель: исследование команд инвертирования.
Программа PRG 8 инвертирование флага переноса регистра F
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3F |
СМС |
Инверсия флага переноса |
0001 |
76 |
HLT |
Остановка |
Рисунок 37До выполнения программы
Рисунок 38Вовремя выполнения программы
7 Инвертирование заданных битов числа
Цель: исследование команд инвертирования чисел.
Таблица 9 - Программа PRG 9инвертирование битов числа
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3E |
MVI A |
Загрузка регистра А непосредственно |
0001 |
21 |
|
Число |
0002 |
0E |
MVI C |
Загрузка регистра непосредственно |
0003 |
8A |
|
Число |
0004 |
A9 |
XRA C |
Аккумулятор ^ регистр C |
0005 |
76 |
HLT |
Остановка |
Здесь выполняется операция инвертирования 2, 4 и 5 бита байта 1000012 (21) с помощью байта-маски 10001010 (8А). В результате получилось 10111111 = BF.
не |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
|
= |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
Рисунок 37До выполнения программы
Рисунок 38После выполнения программы
8Сравнение чисел
Цель: исследование команд поразрядного сравнения чисел (операция исключающая или).
Программа PRG 10поразрядное сравнение чисел
Адрес |
Код |
Мнемоника |
Комментарий |
0000 |
3E |
MVI A |
Загрузка регистра А непосредственно |
0001 |
21 |
|
Число |
0002 |
EE |
XRI |
Аккумулятор ^ память непосредственно |
0003 |
42 |
|
Число |
0004 |
76 |
HLT |
Остановка |
Здесь выполняется операция поразрядного сравнения числа 1000012(2116) и 10000102(4216).
Å |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
|
= |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
В результате получается число 10010112 (4B16).
Рисунок 39До выполнения программы
Рисунок 40 После выполнения программы