1) пересилання N послідовних байтів з однієї області пам'яті в іншу,
ORG 100H
SADR EQU 1000H ;Початкова адреса 1-ї області пам’яті
DADR EQU 2000H ;Початкова адреса 2-ї області пам’яті
N EQU 10 ;Кількість байтів, що потрібно передати
LXI h,SADR ;Завантажуємо адресу 1-ї області пам’яті
LXI d,DADR ;Завантажуємо адресу 2-ї області пам’яті
MVI b,N ;Завантажуємо в регістр В кількість елементів, ; ;щопотрібно передати
;Вхiднi данi передаємочерез регiстри
call peres ;Виклик підпрограми пересилання N
;послідовних байтів з однієї області пам'яті в
;іншу
HLT
l1: MOV a,m ;Перенесення числа з 1-ї області пам’яті в 2-у
STAX d ;Запис вмісту акумулятора в 1-у область пам’яті
INX h ;Інкрементування регістру H
INX d ; Інкрементування регістру D
DCR b ;Зменшуємо число елементів, що потрібно перенести
JNZ l1 ;Якщо число елементів нерінре “0” топереходимо на мітку
;L!, інакше — вихід з підпрограми
ret
2) пересилання послідовності бантів (до заданого) з однієї області в іншу,
ORG 100H
SADR EQU 1000H ;Початкова адреса 1-ї області пам’яті
DADR EQU 2000H ;Початкова адреса 1-ї області пам’яті
N EQU 10 ;Кількість байтів, що потрібно передати
LXI H, SADR ;Завантажуємо адресу 1-ї області пам’яті
LXI D, DADR ;Завантажуємо адресу 2-ї області пам’яті
MVI B, N ;Завантажуємо в регістр В кількість елементів,
;Вхiднi данi передаємочерез регiстри
CALL PERED ;Виклик підпрограми пересилання послідовності
;байтів (до заданого) з однієї області пам'яті в іншу
HLT
;підпрограма пересилання послідовності байтів (до заданого) з однієї області пам'яті в іншу
PERED MOV A, M ;Перенесення числа з 1-ї області пам’яті в 2-у
CMPI 07H : до числа 7H
STAX D ;Запис вмісту акумулятора в 1-у область пам’яті
INX h ;Інкрементування регістру H
INX d ; Інкрементування регістру D
JNZ PERED ;Якщо число елементів нерінре “0” топереходимо на
;мітку PERED, інакше — вихід з підпрограми
RET
3) обчислення суми однобайтових елементів масиву,
ORG 100H
SADR EQU 1000H :Початкова адреса масиву
N EQU 10 :Кількість елементів масиву
lxi h, SADR ;Завантажуємо адресу масиву
mvi b, N ;Завантажуємо кількість елементів масиву
;Вхiднi данi передаємо через регiстри
call SUMM ;Виклик підпрограми обчислення суми одиобайтових
;елементів масиву
hlt
; підпрограма обчислення суми одиобайтових елементів масиву
SUMM:
mvi a, 0 ;заносимо в аккумулятор “0”
l1:
mov C, M ;Занесення в регістр C елемент масиву
add C ;Сумуємо його з акумулятором
inx h ;Інкрементування регістру H
dcr b ;Зменшуємо число елементів
jnz l1 ;Якщо число елементів не рівне “0” топереходимо на мітку
;L!, інакше — вихід з підпрограми
RET
4) Обчислення контрольної суми області пам'яті шляхом додавання за модулем 2 старших і молодших тетрад кожного байту окремо; результат роботи програми — два байти;
ORG 100H
ADR EQU 1000H
N EQU 10
lxi h, ADR
mvi e, N
mvi b, 0fh
mvi c, 0fh
;Вхiднi данi передаємо через регiстри
CALL SUMM
HLT
SUMM: NOP
l2: mov a, m
mov b, a
xri 0fh
xra c
mov c, a
mov a, b
xri 0f0h
mov d, 4
l1: rrc
dcr d
jnz l1
xra b
mov b,a
inx h
dcr e
jnz l2
RET
5) додавання двох багатобайтовнх чисел;
ORG 100H
ADR1 EQU 1000H
ADR2 EQU 2000H
N EQU 10
lxi H, ADR1
lxi D, ADR2
mvi B, N
;Вхiднi данi передаємочерез регiстри
CALL DODAV
HLT
DODAV:
STC
CMC
PUSH PSW
L1:
POP PSW
LDAX D
ADC M
PUSH PSW
STAX D
INX H
INX D
DCR B
JNZ L1
RET
6) обчислення суми N двобайтових елементів масиву,
ORG 100H
ADR1 EQU 1000H
ADR2 EQU 2000H
N EQU 10
lxi H, ADR1
lxi D, ADR2
mvi B, N
;Вхiднi данi передаємочерез регiстри
CALL SUM
hlt
SUM: NOP
L1:
LDAX D
ADD M
STAX D
PUSH PSW
INX H
INX D
POP PSW
LDAX D
ADC M
STAX D
PUSH PSW
INX D
POP PSW
LDAX D
ADCI 0
STAX D
DCX D
DCX D
INX H
DCR B
JNZ L1
RET
7) порівняння двох чисел і запису в задану комірку пам'яті більшого;
ORG 100H
ADR1 EQU 1000H
N1 EQU 100
N2 EQU 200
MVI A, N1
MVI B, N2
LXI H, ADR1
;Вхiднi данi передаємочерез регiстри
CALL PEREN
HLT
PEREN:
CMP B
JP L1
MOV A, B
L1:
MOV M, A
RET
8) перемноження двох однобайтових чисел без знака;
ORG 100H
N1 EQU 5
N2 EQU 7
MVI A, N1
MVI B, N2
LXI H, 0H
L1:
DAD B
DCR A
JNZ L1
HLT
9) запис нулів в область пам'яті з адреси А1 до адреси А2 включно;
ORG 100H
ADDR1 EQU 1000H
ADDR2 EQU 1020H
LXI H, ADDR1
LXI D, ADDR2
L3:
MVI M, 0
MOV A, H
CMP D
JNZ L1
MOV A, L
CMP E
JZ L2
L1:
INX H
JMP L3
L2:
HLT
10) знаходження максимального числа в масиві даних, представлених як ціле число без знака;
ORG 100H
ADR1 EQU 1000H
N EQU 10
LXI H, ADR1
MVI B, N
MOV A, M
INX H
DCR B
L1:
MOV D, M
CMP D
JP L2
MOV A, D
L2:
INX H
DCR B
JNZ L1
HLT
ORG 1000H
DB 1, 2, 3, 4, 12, 6, 7, 8, 0, 10, 31
11) віднімання двох багатобайтових десяткових двійково-кодоваиих чисел без знака;
ORG 100H
N1 EQU 17
N2 EQU 5
LXI H, 1000H
MVI C, N1
MVI E, 1111B
MVI A, N2
CMA
INR A
ADD C
HLT
12) ділення 16-розрядного числа без знака на 8-розрядне число без знака;
ORG 100H
MVI B, 5
MVI A, 45
MVI C, 0
MOV D, A
L1:
SUB B
JM L2
INR C
JMP L1
L2:
HLT
13) визначення кількості одиниць в заданому байті;
ORG 100H
MVI A, 11001100B
MVI B, 0
MVI C, 8
M2:
RRC
JNC M1
INR B
M1:
DCR C
JNZ M2
HLT
14) визначення кількості одиниць і двох байтах;
ORG 100H
BYTES EQU 0010011001001001B
LXI H, BYTES
MVI A, H
CALL NUM
MOV D, B
MOV A, L
CALL NUM
MOV A, B
ADD B
HLT
NUM: MVI B, 0
MVI C, 8
M2:
RRC
JNC M1
INR B
M1:
DCR C
JNZ M2
RET
15) визначення кількості нулів в байті;
ORG 100H
MVI A, 10001000B
MVI B, 0
MVI C, 8
M2:
RRC
JC M1
INR B
M1:
DCR C
JNZ M2
HLT
16) визначення кількості нулів у двох байтах;
ORG 100H
BYTES EQU 0010011001001001B
LXI H, BYTES
MVI A, H
CALL NUM
MOV D, B
MOV A, L
CALL NUM
MOV A, B
ADD B
HLT
NUM:
MVI B, 0
MVI C, 8
M2:
RRC
JC M1
INR B
M1:
DCR C
JNZ M2
RET
17) знаходження мінімального числа в масиві даних, представлених як ціле без знака;
ORG 100H
ADR1 EQU 1000H
N EQU 10
LXI H, ADR1
MVI B, N
MOV A, M
INX H
DCR B
L1:
MOV D, M
CMP D
JM L2
MOV A, D
L2:
INX H
DCR B
JNZ L1
HLT
ORG 1000H
DB 1, 2, 3, 4, 12, 6, 7, 8, 0, 10, 31
18) дадавання двох 8-розрядних десяткових двійково-кодоваиих чисел;
19) додавання двох 4-розрядних десяткових двійково-кодованих чисел;
20) множення двох 2-розряцних двійково-кодоваиих десяткових чисел;
ORG 100H
VAL1 EQU 10
VAL2 EQU 4
LEN EQU 1 ;N=1
LXI H, ADR1
MVI D, LEN
LXI B, ADR2
RNC
L1:
LDAX B
ADC M
MOV M, A
PUSH PSW
INX H
INX B
DCR D
POP PSW
JNZ L1
HLT
21) віднімання двох Іб-розрядних двійкових чисел;
ORG 100H
VAL1 EQU 100
VAL2 EQU 30
LXI H, VAL1
LXI D, VAL2
MOV A, L ;Заносимо в аккумулятор мол. байт зменшуваного
SUB E ;Вінімаємо від нього мол. байт від’ємника
MOV L, A ;Запам’ятовуємо мол. байт результату в регістрі L
MOV A, H ;Заносимо в аккумулятор старший байт зменшуваного для
;віднімання
SBB D ;Віднімаємо сиарший байт від’ємника з врахуванням переносу
MOV H, A ;Запам’ятовуємо старший байт результату в регістрі H
HLT
22) впорядкування масиву однобайтових чисел за зростанням;
ORG 100H
ADDR1 EQU 1000H
LEN EQU 10 ; LEN - довжина масиву
LXI H, ADDR1
MVI C, LEN
MOV E, C
L1:
PUSH H
MVI B, 0
L2:
DCR C
JZ L3
MOV A, M
INX H
CMP M
JC L4
MOV D, M
MOV M, A
DCX H
MOV M, D
INX H
MVI B, 1
L4:
JMP L2
L3:
POP H
DCR B
JNZ L5
MOV C, E
JMP L1
L5:
HLT
23) формування квадратної матриці 5Х5 (значення діагональних елементів дорівнює номеру рядка, в якому знаходиться елемент, позадіагональних елементів - нулю);
ORG 100H
A1 EQU 1000H
N EQU 5
LXI H, A1
MVI C, 0
L1:
SUB A
L2:
CMP C
JNZ L3
INR A
MOV M, A
JMP L4
L3:
INR A
MVI M, 0
L4:
INX H
CPI N
JNZ L2
INR C
MOV A, C
CPI N
JNZ L1
HLT
24) впорядкування масиву чисел за спаданням.
ORG 100H
;Основна програма
ADDR1 EQU 1000H
LEN EQU 10
;LEN - довжина масиву
;Вхiднi данi передаємочерез регiстри
LXI H, ADDR1
;У регiстровiй парi [HL] - адреса початку масиву
MVI C, LEN
;У регiстрi [C] — ;кiлькiсть елементiв масиву
CALL SORT
HLT
SORT:
MOV E, C
L1:
PUSH H
MVI B, 0
L2:
DCR C
JZ L3
MOV A, M
INX H
CMP M
JNC L4
MOV D, M
MOV M, A
DCX H
MOV M, D
INX H
MVI B, 1
L4:
JMP L2
L3:
POP H
DCR B
JNZ L5
MOV C, E
JMP L1
L5:
RET