МПС 3 курс Практические задания дополнительно - BysonHunter/Tavrich_college GitHub Wiki
🏠 Главная · Микропроцессорные системы · 3 курс · Практические работы по МДК.02.01 «Микропроцессорные системы»
mvi a, 10
mvi b, 5
add b
mov d, a
######### 2
;0020 0021
lda 0020
mov b, a
lda 0021
add b
mov d, a
######### 3
;0020 0021
lhld 0020
mov a, h
add l
mov d, a
######### 4
;0020 0021
lxi h, 0020
mov a, m
inx h
add m
mov d, a
Написать программу вычитания Числа2 из Числа1, результат занести в ячейку памяти, если результат отрицательный, в результат вывести значение 255.
B = 10; C = 12
mov a , b
sub c
jc 0010
mov d, a
HLT
0010: mvi d, FF
HLT
mov a , b
sub c
jc 0010
mov d, a
jmp 0012
0010: mvi d, FF
0012: HLT
mov a , b
sub c
jnc 0010
mvi a, FF
0010:mov d, a
HLT
программа 8
ячейки памяти: 0020, 0021
LXI H, 0020
MOV A, M
INX H
SUB M
JC 0010
MOV D, A
JMP 0012
0010: MVI D, FF
NOP
0012: HLT
Программа 9
ячейки памяти: 0020, 0021
LXI H, 0020
MOV A, M
INX H
SUB M
JNC 0010
MVI A, FF
0010: MOV D, A
HLT
Программа 10
ячейки памяти: 0020, 0021
результат в 0022
| LXI H, 0020 MOV A, M INX H SUB M JNC 0010 MVI A, FF 0010: STA 0022 HLT |
LXI H, 0020 MOV A, M INX H SUB M JNC 0010 MVI A, FF 0010: INX H MOV M, A HLT |
|---|
написать программу сложения 3х чисел, находящихся в ЯП, начиная с 0020
решение:
сделаем счетчик в С (counter)
| LXI H, 0020 MVI C, 02 MOV A, M l1:INX H ADD M DCR C JNZ l1 (метка, куда?) INX H MOV M, A HLT |
LXI H, 0020 MVI C, 03 XRA A (SUB A) ОБНУЛИТЬ АКК l1:ADD M INX H DCR C JNZ l1 INX H MOV M, A HLT |
|---|
составить программу на выбор большего из 2х чисел
числа хранятся в ЯП, 0020 и 0021, результат в 0022
LXI H 0020
MOV C,M INX H
MOV A,M
CMP C INX H JNC 0010
MOV C,A
MOV M,A 0010:MOV M,A HLT
составить программу поиска максимума из массива 16 чисел
начало массива по адресу 0030h, количество 10h
максимум сохранить в D
LXI H, 0030h \определяем начало массива
MVI C, 10h \организуем счетчик
XRA A \обнуляем акк
M2:CMP M \сравниваем со значением в памяти
JNC M1 \если нет заема-переноса то идем на м1
MOV A,M \иначе в акк заносим из памяти
M1:INX H \получаем следующий элемент массива
DCR C \уменьшаем счетчик
JNZ M2 \если счетчик <>0, идем на м2
MOV D,A \иначе максимум заносим в D
HLT \стоп
1-й (5 элементов) по адресу 0040h, 2-й (10 элементов) по адресу 0050h,
1/составить программу вычисления суммы элементов 2х массивов
2\составить программу поиска максимума в 2 массивах
результаты сохранить по адресам 0060 и 0061.
Использовать подпрограмму (CALL RET)
| Основная программа 1.формируем адрес 1 массива (HL) 2.формируем счетчик в С 3.вызвать подпрограмму суммирования 4.сохранить результат по адресу 0060 5.формируем адрес 2 массива (HL) 6. формируем счетчик в С 7.вызвать подпрограмму суммирования 8. сохранить результат по адресу 0061 |
LXI H, 0040H MVI C, 05H CALL M1 STA 0060H LXI H, 0050H MVI C, 0AH CALL M1 STA 0061H HLT |
|---|---|
| подпрограмма: 1.обнулить Акк 2.Сложить с (М) 3.сформировать адрес следующего элемента 4.уменьшить счетчик 5.проверить условие счетчик <>0, если да, то переход на 2. 6.возврат |
M1:XRA A M2:ADD M INX H DCR C JNZ M2 RET |
| 0000 21 LXI H, d16 0001 40 MOV B, B 0002 00 NOP 0003 0E MVI C, d8 0004 05 DCR B 0005 CD CALL adr 0006 20 - 0007 00 NOP 0008 32 STA adr 0009 60 MOV H, B 000A 00 NOP 000B 21 LXI H, d16 000C 50 MOV D, B 000D 00 NOP 000E 0E MVI C, d8 000F 0A LDAX B 0010 CD CALL adr 0011 20 - 0012 00 NOP 0013 32 STA adr 0014 61 MOV H, C 0015 00 NOP 0016 76 HLT |
0040 01 LXI B, d16 0041 02 STAX B 0042 03 INX B 0043 04 INR B 0044 05 DCR B 0050 01 LXI B, d16 0051 01 LXI B, d16 0052 01 LXI B, d16 0053 01 LXI B, d16 0054 01 LXI B, d16 0055 01 LXI B, d16 0056 01 LXI B, d16 0057 01 LXI B, d16 0058 01 LXI B, d16 0059 01 LXI B, d16 |
| 0020 AF XRA A 0021 86 ADD M 0022 23 INX H 0023 0D DCR C 0024 C2 JNZ adr 0025 21 LXI H, d16 0026 00 NOP 0027 C9 RET |
0060 0F RRC 0061 0A LDAX B |
| подпрограмма 2 XRA A M2:CMP M JNC M1 MOV A,M M1:INX H DCR C JNZ M2 |
Составить программу вывода на экран слова «МИКРОПРОЦЕССОР». Цвет символов меняется от символа к символу.
1. Коды символов (в 10 формате!)
М И К Р О П Р О Ц Е С С О Р
140 136 138 144 142 143 144 142 150 133 145 145 142 144
8С 88 8А 90 8E 8F 90 8E 96 85 91 91 8E 90
Количество символов 14. 0Eh
2. Цвет символов 7Fh – белый (для начала). Шаг смены цвета 05.
3. Расположение символов начиная с ячейки 0050h
Необходимо занести в память начиная с адреса 0050 коды символов.
Код цвета 01111111 - 7Fh – занести в регистр В
Подпрограмма будет брать код цвета символа из регистра В, код символа в памяти по адресу, находящемуся в регистровой паре HL, и выводить в порт монитора. Адрес подпрограммы – определим 0030h.
Счетчик количества символов будет находиться в регистре С.
| Основная программа: 1. Занести в регистровую пару HL адрес начала массива. 2. Занести в регистр В код цвета символов. 3. Организовать в регистре С счетчик – занести туда 14 (0Еh). 4. Вызвать на выполнение подпрограмму вывода на экран монитора символа. 5. Инкрементирировать регистровую пару HL. 6. Вычесть из В 05 – изменить цвет символа (перенести из В в Асс, вычесть, перенести обратно в В) 7. Декрементировать счетчик. 8. Проверить флаг Z. Если он не равен 0, то перейти к шагу 4. |
LXI H, 0050h MVI B, 7Fh MVI C, 0Eh P2: CALL P1 (0030h) INX H MOV A, B SUI 05h MOV B, A DCR C JNZ P2 HLT |
0000 21 LXI H, d16 0001 50 MOV D, B 0002 00 NOP 0003 06 MVI B, d8 0004 7F MOV A, A 0005 0E MVI C, d8 0006 0D DCR C 0007 CD CALL adr 0008 30 - 0009 00 NOP 000A 23 INX H 000B 78 MOV A, B 000C D6 SUI d8 000D 05 DCR B 000E 47 MOV B, A 000F 0D DCR C 0010 C2 JNZ adr 0011 07 RLC 0012 00 NOP 0013 76 HLT |
|---|---|---|
| Подпрограмма. 1. Считать из регистра В код цвета символа и занести его в Асс. 2. Отправить в порт монитора. 3. Считать по адресу в памяти код символа и занести его в Асс. 4. Отправить в порт монитора. |
P1: MOV A,B OUT 00h MOV A,M OUT 00h RET |
0030 78 MOV A, B 0031 D3 OUT N 0032 00 NOP 0033 7E MOV A, M 0034 D3 OUT N 0035 00 NOP 0036 C9 RET |
← Практическая работа №6 · Пример решения задачи по способам адресации →