Реферат: Асемблер Задание 4 - вар2

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

еще рефераты
Еще работы по астрономии