Реферат: Асемблер Задание 4 - вар2
Название: Асемблер Задание 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 |