Асемблер Завдання 3 - вар2

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

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

MVI D, 06; завдання кол-ва зрушень (6 зрушень рівносильно поділу на 64)

CALL DIV; виклик підпрограми ділення

Після DIV: Середнє значення знаходиться в регістрі В

LXI H, 8100; завдання адреси першого елемента (HL: = 8100H)

MVI D, 40; завдання кол-ва елементів

MOV A, M; будемо вважати перший елемент мінімальним (A: = M (HL))

X3: CMP M; порівнюємо мінімальний елемент з поточним (A-М (HL))

JM X 4; при S = 1 (A - M (HL) <0 → A <M (HL)) перехід на Х4

MOV A, M, якщо ж S = 0 (A - M (HL) ≥ 0 → A ≥ M (HL)), зробити поточний елемент

найменшим

X 4: INX H; привласнити HL адреса наступної комірки (HL: = HL +1)

DCR D ; Зменшення лічильника кол-ва елементів на 1 (D: = D -1)

JNZ X3, якщо елемент не останній - продовжити

MOV C, A ; Пересилання значення A MIN в регістр C

Мінімальне значення знаходиться в регістрі З

MOV A, C; пересилаємо мінімальне значення в акумулятор (C → A)

RAR; циклічний зсув вправо через перенос (поділ на 2)

ORA A; обнулення прапора переповнення (ТС: = 0)

MVI C, 00; обнулення регістра C (лічильник переповнень)

ADD B; підсумовування: А СР + А MIN / 2

JNC X 5; перейти на Х5 якщо немає переповнювання

INR C; сталося переповнення → додати 1 до старшого байту

результату Y

X 5: MOV B, A; пересилаємо молодший байт з акумулятора в регістр B

Значення (Аср + Amin / 2) знаходиться в парі НД

MVI D, 02; завдання кол-ва зрушень (2 зсуву рівносильно поділу на 4)

CALL DIV; виклик підпрограми DIV (ділення на 4)

Після DIV: Y знаходиться в регістрі В

MOV A, B; пересилаємо значення Y в регістр акумулятор (B → A)

STA 8150; пересилаємо значення Y (остаточний результат) в клітинку 8150 H

RST 1; вихід з програми

DIV: 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 DIV ; Якщо зрушення не останній - продовжити

RET; вихід з підпрограми DIV

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

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

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


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