Пересилання N послідовних байт з однієї області пам’яті в іншу:
org 100h
N EQU 03h
mvi c,N
lxi d,SRC
lxi h,DST
call MOVE
nop
hlt
MOVE:
ldax d
mov m,a
inx d
inx h
dcr c
jnz MOVE
ret
SRC db 01h,02h,03h
DST db 00h,00h,00h
---------------------------------------------------------------------
Пересилання послідовності байтів(до заданого) з однієї облісті пам’яті в іншу.
org 100h
ENDCHAR EQU 00h
mvi c,ENDCHAR
lxi d,SRC
lxi h,DST
call MOVE
nop
hlt
MOVE:
ldax d
mov m,a
inx d
inx h
cmp c
jnz MOVE
ret
SRC db 01h,02h,03h,00h
DST db 00h,00h,00h,00h
----------------------------------------------------------------Обчислення суми однобайтових елементів масиву
org 100h
N EQU 05h
mvi c,N
lxi h,ARRAY
call ARRSUM ; DE=SUM(ARRAY[i])
nop
hlt
ARRSUM:
lxi d,0000h
L00:
mov a,m
add e
mov e,a
mov a,d
aci 00h
mov d,a
inx h
dcr c
jnz L00
ret
ARRAY db 0F0h,0F0h,07h,08h,09h
---------------------------------------------------------------------
Обчислення контрольної суми області пам’яті шляхом додавання за модулем 216 старших і молодших тетрад кожного байту окремо; результат програми – два байти
org 100h
N EQU 05h
mvi c,N
lxi h,ARRAY
call ARRCS ; DE=CHECKSUM(ARRAY[i])
nop
hlt
ARRCS:
lxi d,0000h
L00:
mov a,m
ani 0Fh
add e
mov e,a
mov a,d
aci 00h
mov d,a
mov a,m
ani 0F0h
rrc
rrc
rrc
rrc
add e
mov e,a
mov a,d
aci 00h
mov d,a
inx h
dcr c
jnz L00
ret
ARRAY db 0F0h,0F0h,07h,08h,09h
---------------------------------------------------------------------
Додавання двох багатобайтових чисел.
org 100h
N EQU 04h
mvi c,N
lxi d,SRC
lxi h,DST
call ADDN ; DST = DST + SRC
nop
hlt
ADDN:
ora a
L00:
ldax d
adc m
mov m,a
inx d
inx h
dcr c
jnz L00
ret
DST db 78h,34h,56h,12h
SRC db 78h,34h,56h,12h
---------------------------------------------------------------------
Обчислення суми N двобайтових елементів масиву.
org 100h
N EQU 03h
mvi a,N
lxi b,ARRAY
call MADD2
hlt
MADD2:
lxi h,0000h
L00:
push psw
ldax b
mov e,a
inx b
ldax b
mov d,a
inx b
dad d
pop psw
dcr a
jnz L00
ret
ARRAY: dw 1002h
dw 5005h
dw 3009h
---------------------------------------------------------------------
Порівняння двох чисел і запису в задану комірку пам’яті більшого.
org 100h
N1 EQU 10h
N2 EQU 20h
lxi h,DST
mvi b,N1
mvi c,N2
call CMPSAVE
nop
hlt
CMPSAVE:
mov a,b
cmp c
jnc L00
mov m,c
ret
L00:
mov m,b
ret
DST db 00h
---------------------------------------------------------------------
Перемноження двох однобайтових чисел без знака
org 100h
mvi c,0FFh
mvi b,0AAh
call MUL
nop
hlt
MUL:
mvi d,00h
mov e,b
lxi h,0000h
mvi a,08h
L00:
push psw
mov a,c
rrc
mov c,a
jnc L01
dad d
L01:
xra a
mov a,d
ral
mov d,a
xra a
mov a,e
ral
mov e,a
mvi a,00h
adc d
mov d,a
pop psw
dcr a
jnz L00
ret
---------------------------------------------------------------------
Запис нулів в облать пам’яті з адреси А1 до адреси А2 включно.
org 100h
A1 EQU 0200h
A2 EQU 0210h
lxi h,A1
lxi d,A2
call ZERO ; A2 MUST BE >= A1
nop
hlt
ZERO:
mov a,d
cmp h
jnz L00
mov a,e
cmp l
jz L01
L00:
mvi m,00h
inx h
jmp ZERO
L01:
mvi m,00h
ret
---------------------------------------------------------------------
Знаходження максимального числа в масиві даних, представлених як ціле число без знаку.
org 100h
N EQU 05h
mvi c,N-1
lxi h,ARRAY
call ARRMAX ; A=MAX(ARRAY[i])
nop
hlt
ARRMAX:
mov a,m
L00:
inx h
cmp m
jnc L01
mov a,m
L01:
dcr c
jnz L00
ret
ARRAY db 060h,070h,0F7h,98h,0FFh
---------------------------------------------------------------------
Віднімання двох багатобайтових десяткових двійково – кодованих чисел без знака.
org 100h
N EQU 02h
mvi c,N
lxi h,SRC + N - 1
lxi d,DST + N - 1
call SUBBCD ; DST = DST - SRC
nop
hlt
SUBBCD:
stc
L00:
mvi a,99h
aci 00h
sub m
xchg
add m
daa
mov m,a
xchg
dcx h
dcx d
dcr c
jnz L00
ret
DST: db 56h
db 73h
SRC: db 24h
db 89h
Ділення 16-ти розрядного числа без знака на 8-ми розрядне число без знака.
org 100h
lxi d,0319h
mvi b,24h
call DIV ; C = DE / B (E) {DE = B*C + E}
nop
hlt
DIV:
mov a,d
cmp b
jnc ERROR
mvi c,00h
L00:
mov a,d
cpi 00h
jnz L01
mov a,e
cmp b
jnc L01
ret
L01:
mov a,e
sub b
mov e,a
mov a,d
sbi 00h
mov d,a
inr c
jmp L00
ERROR:
ret
---------------------------------------------------------------------
Визначення кількості одиниць в заданому байті.
org 100h
N EQU 0AAh
mvi a,N
call ONES ; B = "1" in A
nop
hlt
ONES:
lxi b,0008h
L00:
rrc
jnc L01
inr b
L01:
dcr c
jnz L00
ret
---------------------------------------------------------------------
Визначення кількості одиниць в двох байтах.
org 100h
N EQU 0AAFFh
lxi d,N
call ONES2 ; B = "1" in DE
nop
hlt
ONES2:
mvi b,00h
mov a,d
call ONES
mov a,e
call ONES
ret
ONES:
mvi c,08h
L00:
rrc
jnc L01
inr b
L01:
dcr c
jnz L00
ret
---------------------------------------------------------------------
Визначення кількості нулів в заданому байті.
org 100h
N EQU 0AAh
mvi a,N
call ZEROS ; B = "0" in A
nop
hlt
ZEROS:
lxi b,0008h
L00:
rrc
jc L01
inr b
L01:
dcr c
jnz L00
ret
---------------------------------------------------------------------
Визначення кількості нулів в двох байтах.
org 100h
N EQU 0AA00h
lxi d,N
call ZEROS2 ; B = "0" in DE
nop
hlt
ZEROS2:
mvi b,00h
mov a,d
call ZEROS
mov a,e
call ZEROS
ret
ZEROS:
mvi c,08h
L00:
rrc
jc L01
inr b
L01:
dcr c
jnz L00
ret
---------------------------------------------------------------------
Знаходхення мінімального числа в масиві даних, представлених, як ціле число
org 100h
N EQU 05h
mvi c,N-1
lxi h,ARRAY
call ARRMIN ; A=MIN(ARRAY[i])
nop
hlt
ARRMIN:
mov a,m
L00:
inx h
cmp m
jc L01
mov a,m
L01:
dcr c
jnz L00
ret
ARRAY db 060h,070h,050h,98h,040h
---------------------------------------------------------------------
Додавання двох 8-ми розрядних десяткових двійково – кодованих чисел.
org 100h
N EQU 04h
mvi c,N
lxi d,SRC + N - 1
lxi h,DST + N -1
call ADDBCD ; DST = DST + SRC
nop
hlt
ADDBCD:
ora a
L00:
ldax d
adc m
daa
mov m,a
dcx d
dcx h
dcr c
jnz L00
ret
DST: db 12h
db 34h
db 56h
db 78h
SRC: db 12h
db 34h
db 56h
db 78h
---------------------------------------------------------------------
Додавання двох 4-х розрядних десяткових двійково – кодованих чисел.
org 100h
N EQU 02h
mvi c,N
lxi d,SRC + N - 1
lxi h,DST + N -1
call ADDBCD ; DST = DST + SRC
nop
hlt
ADDBCD:
ora a
L00:
ldax d
adc m
daa
mov m,a
dcx d
dcx h
dcr c
jnz L00
ret
DST: db 12h
db 78h
SRC: db 12h
db 56h
---------------------------------------------------------------------
Множення двох 2-х розрядних десяткових двійково – кодованих чисел.
org 100h
mvi c,16h
mvi b,06h
call MULBCD
nop
hlt
MULBCD:
mvi d,00h
mov a,b
cpi 00h
jnz L00
ret
L00:
mov a,d
add c
daa
mov d,a
dcr b
jnz L00
ret
---------------------------------------------------------------------
Віднімання двох 16-ти розрядних двійкових чисел.
org 100h
SRC1 EQU 5678h
SRC2 EQU 1290h
lxi d,SRC1
lxi b,SRC2
call SUB16 ; HL = SRC1-SRC2
nop
hlt
SUB16:
mov a,e
sub c
mov l,a
mov a,d
sbb b
mov h,a
ret
---------------------------------------------------------------------
Впорядкування масиву однобайтових чисел за зростанням.
org 100h
mvi b,05h
lxi d,array
lxi h,array
call SORT
hlt
SORT:
dcr b
inx d
L00: push h
push d
mvi c,00h
L01: ldax d
cmp m
jnc L02
push psw
mov a,m
stax d
pop psw
mov m,a
L02: inx h
inx d
inr c
mov a,c
cmp b
jnz L01
dcr b
pop d
pop h
jz L03
jmp L00
L03:
ret
ARRAY: db 05h
db 04h
db 03h
db 02h
db 01h
---------------------------------------------------------------------
Формування квадратної матриці 5х5. Значення діагональних елементів дорівнює номеру рядка, в якому знаходиться елемент, позадіагональних елементів – нулю)
org 100h
lxi h,array
call MATR
nop
nop
nop
hlt
MATR:
mvi b,01h
L00: mvi c,01h
L01: mov a,b
cmp c
jnz L02
mov m,c
jmp L03
L02: mvi m,00h
L03: inx h
inr c
mvi a,06h
cmp c
jnz L01
inr b
cmp b
jnz L00
ret
ARRAY: db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
db 11h
---------------------------------------------------------------------
Впорядкування масиву однобайтових чисел за зростанням.
org 100h
mvi b,05h
lxi d,array
lxi h,array
call SORT
hlt
SORT:
dcr b
inx d
L00: push h
push d
mvi c,00h
L01: ldax d
cmp m
jc L02
push psw
mov a,m
stax d
pop psw
mov m,a
L02: inx h
inx d
inr c
mov a,c
cmp b
jnz L01
dcr b
pop d
pop h
jz L03
jmp L00
L03:
ret
ARRAY: db 01h
db 02h
db 03h
db 04h
db 05h