Асемблер Завдання 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 ; Пересилання значення A MAX / 2 в регістр E

Значення A MAX / 2 знаходиться в регістрі Е

REZ 1: MOV A, B; відправляємо молодший байт значення 2А СР в акумулятор

SUB E; віднімаємо A MAX / 2 від молодшого байта значення 2А СР

JP X6; якщо результат неотріцателен - перейти на Х6

DCR C ; Якщо результат негативний - відняти 1 від старшого байта

значення 2А СР

X 6: MOV B, A; пересилаємо молодший байт значення (2А СР - A MAX / 2) в регістр В

Значення (2А СР - A MAX / 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 ; Пересилання значення A MIN / 2 в регістр E

Значення A MIN / 2 знаходиться в регістрі Е

! Значення Y теоретично не перевищує два байти! Y MAX = BE 01 H

MULT: MOV D, E; завантажити множник (A MIN / 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 в клітинку 8150 H

MOV A, C; переслати старший байт результату Y в акумулятор

STA 8151; відправити старший байт результату Y в клітинку 8151 H

RST 1

Додати в блог або на сайт

Цей текст може містити помилки.

Астрономія | Реферат
26.4кб. | скачати


Схожі роботи:
Асемблер Завдання 3 - вар2
Асемблер Завдання 2 - вар 2
Контрольна (варіант 12), 4 завдання на Асемблер
Асемблер 2
Асемблер
Асемблер Контрольна - варіант 1
Асемблер Контрольна - вар1
Програмування на мові Асемблер
Асемблер для платформи Java
© Усі права захищені
написати до нас