Главная Учебники - Разные Лекции (разные) - часть 26
SUMM
: LXI H, 8100
;задание адреса первого элемента (HL:=8100H) MVI
D
, 40
;задание кол-ва элементов XRA A
;обнуление аккумулятора MVI
C
, 00
;обнуление регистра C (счетчик переполнений) X
1:
ADD
M
;суммирование (A:=A+M(HL)) JNC X2
;перейти на Х2 если нет переполнения INR
C
;произошло переполнение → прибавить 1 к старшему байту результата суммирования X2: INX H
;присвоить HL адрес следующей ячейки (HL:=HL+1) DCR
D
;уменьшение счётчика кол-ва элементов на 1 (D:=D-1) JNZ X1
;если элемент не последний - продолжить суммирование MOV
B
,
A
;пересылка младшего байта результата суммирования в регистр В Сумма 64х элементов находится в паре BC ACP
:
MVI
D
, 06
;задаём кол-во сдвигов (6 сдвигов – деление на 64) MOV
A
,
C
;пересылаем старший байт в аккумулятор (C→A) RAR
;циклический сдвиг вправо через ТС MOV
C
,
A
;возврат в C старшего байта MOV
A
,
B
;пересылаем младший байт в аккумулятор (B→A) RAR
;циклический сдвиг вправо через ТС MOV
B
,
A
;возврат в B младшего байта ORA
A
;обнуление флага переполнения (ТС:=0) DCR
D
;уменьшение счётчика кол-ва сдвигов на 1 (D:=D-1) JNZ
ACP
;если сдвиг не последний – продолжить Среднее значение находится в регистре В MOV
A
,
B
;пересылаем среднее значение в аккумулятор ADD
B
;получаем в аккумуляторе значение 2АСР
JNC X3
;перейти на Х3 если нет переполнения INR
C
;произошло переполнение → прибавить 1 к старшему байту значения 2АСР
X
3:
MOV
B
,
A
;пересылка 2АСР
в регистр В Значение 2АСР
находится в паре ВС AMAX
:
LXI H, 8100
;задание адреса первого элемента (HL:=8100H) MVI
D
, 40
;задание кол-ва элементов MOV
A
,
M
;
будем считать первый элемент максимальным (A:=M(HL)) X4:
CMP
M
;сравниваем максимальный элемент с текущим (A-М(HL)) JP
X
5
;при S=0 (A-M(HL)≥0 → A≥M(HL)) переход на Х5 MOV
A
,
M
;если же S=1 (A-M(HL)<0 → A<M(HL)), сделать текущий элемент максимальным X
5: INX H
;присвоить HL адрес следующей ячейки (HL:=HL+1) DCR
D
;уменьшение счётчика кол-ва элементов на 1 (D:=D-1) JNZ X4
;если элемент не последний - продолжить Максимальное значение находится в аккумуляторе RAR
;циклический сдвиг вправо через перенос (деление на 2) ORA
A
;обнуление флага переполнения (ТС:=0) MOV
E
,
A
;пересылка значения AMAX
/2 в регистр E Значение AMAX
/2 находится в регистре Е REZ
1:
MOV
A
,
B
;
отправляем младший байт значения 2АСР
в аккумулятор SUB
E
;отнимаем AMAX
/2 от младшего байта значения 2АСР
JP X6
;если результат неотрицателен - перейти на Х6 DCR
C
;если результат отрицателен - вычесть 1 от старшего байта значения 2АСР
X
6:
MOV
B
,
A
;пересылаем младший байт значения (2АСР
- AMAX
/2) в регистр В Значение (2АСР
- AMAX
/2) находится в паре ВС AMIN
:
LXI H, 8100
;задание адреса первого элемента (HL:=8100H) MVI
D
, 40
;задание кол-ва элементов MOV
A
,
M
;
будем считать первый элемент минимальным (A:=M(HL)) X7:
CMP
M
;сравниваем минимальный элемент с текущим (A-М(HL)) JM
X
8
;при S=1 (A-M(HL)<0 → A<M(HL)) переход на Х8 MOV
A
,
M
;если же S=0 (A-M(HL)≥0 → A≥M(HL)), сделать текущий элемент наименьшим X
8: INX H
;присвоить HL адрес следующей ячейки (HL:=HL+1) DCR
D
;уменьшение счётчика кол-ва элементов на 1 (D:=D-1) JNZ X7
;если элемент не последний - продолжить Минимальное значение находится в аккумуляторе RAR
;циклический сдвиг вправо через перенос (деление на 2) ORA
A
;обнуление флага переполнения (ТС:=0) MOV
E
,
A
;пересылка значения AMIN
/2 в регистр E Значение AMIN
/2 находится в регистре Е !!!Значение Y теоретически не превышает два байта!!! YMAX
= BE01H MULT
:
MOV
D
,
E
;загрузить множитель (AMIN
/2) в регистр D DCR
D
;уменьшение на 1 множителя MOV
A
,
C
;пересылка старшего байта множимого в аккумулятор X
9:
ADD
C
;суммируем по одному значению DCR
D
;уменьшить кол-во циклов суммирования на 1 JNZ
X
9
;если цикл не последний – повторить суммирование MOV
C
,
A
;переслать старший байт Yв регистр С MOV
D
,
E
;загрузить множитель в регистр D DCR
B
;уменьшение на 1 множителя MOV
A
,
B
;пересылка младшего байта множимого в аккумулятор X
11:
ADD
B
;суммируем по одному значению JNC
X
12
;если нет переполнения – перейти на Х12 INR
C
;если было переполнение – увеличить старший байт на 1 X
12:
DCR
D
;уменьшить кол-во циклов суммирования на 1 JNZ
X
11
;если цикл не последний – повторить суммирование STA
8150
;отправить младший байт результата Y в ячейку 8150H MOV
A
,
C
;переслать старший байт результата Y в аккумулятор STA
8151
;отправить старший байт результата Y в ячейку 8151H RST
1
|