LXI H, 8100 ;задание адреса первого элемента (HL:=8100H) MVI D, 40 ;задание кол-ва элементов XRA A ;обнуление аккумулятора MVI C, 00 ;обнуление регистра C (счетчик переполнений) X1: ADDM ;суммирование (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 ;если элемент не последний - продолжить суммирование
MOVB, A ;пересылка младшего байта результата суммирования в регистр В Сумма 64х элементов находится в паре BC MVI D, 06 ;задание кол-ва сдвигов (6 сдвигов равносильно делению на 64) CALLDIV ;вызов подпрограммы деления После DIV: Среднее значение находится в регистре В
LXI H, 8100 ;задание адреса первого элемента (HL:=8100H) MVI D, 40 ;задание кол-ва элементов MOV A, M ;будем считать первый элемент минимальным (A:=M(HL)) X3: CMPM ;сравниваем минимальный элемент с текущим (A-М(HL))
JMX4 ;при S=1 (A-M(HL)<0 → A<M(HL)) переход на Х4 MOVA, M ;если же S=0 (A-M(HL)≥0 → A≥M(HL)), сделать текущий элемент наименьшим X4: INX H ;присвоить HL адрес следующей ячейки (HL:=HL+1) DCR D ;уменьшение счётчика кол-ва элементов на 1 (D:=D-1) JNZ X3 ;если элемент не последний - продолжить
MOVC, A;пересылка значения AMIN в регистр C Минимальное значение находится в регистре С MOVA, C ;пересылаем минимальное значение в аккумулятор (C→A)
RAR ;циклический сдвиг вправо через перенос (деление на 2)
ORAA ;обнуление флага переполнения (ТС:=0) MVI C, 00 ;обнуление регистра C (счетчик переполнений)
ADDB ;суммирование: АСР + АMIN/2 JNCX5 ;перейти на Х5 если нет переполнения
INRC ;произошло переполнение → прибавить 1 к старшему байту результата Y X5: MOVB, A ;пересылаем младший байт из аккумулятора в регистр B Значение (Аср + Amin/2) находится в паре ВС MVI D, 02 ;задание кол-ва сдвигов (2 сдвига равносильно делению на 4)
CALL DIV ;вызов подпрограммы DIV (деление на 4) После DIV: Y находится в регистре В
MOVA, B ;пересылаем значение Y в регистр аккумулятор (B→A)
STA 8150 ;пересылаем значение Y (окончательный результат) в ячейку 8150H RST 1 ;выход из программы DIV: MOVA, C ;пересылаем старший байт в аккумулятор (C→A)
RAR ;циклический сдвиг вправо через ТС
MOVC, A ;возврат в C старшего байта
MOVA, B ;пересылаем младший байт в аккумулятор (B→A)
RAR ;циклический сдвиг вправо через ТС
MOVB, A ;возврат в B младшего байта
ORAA ;обнуление флага переполнения (ТС:=0) DCR D ;уменьшение счётчика кол-ва сдвигов на 1 (D:=D-1) JNZ DIV ;если сдвиг не последний – продолжить RET ;выход из подпрограммы DIV
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |