Контрольна (варіант 12), 4 завдання на Асемблер

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

скачати



Завдання № 1

M3 = 38H - (B - C) + (M1 + M2) - E M1 = 8061H, M2 = 8062H, M3 = 8063H

MOV A, B; A ← B

SUB C; B - C

MOV C, A; C ← (BC)

MVI A, 38; A ← 38

SUB C; 38 - (BC)

SUB E; (38 - (BC)) - E

MOV E, A; E ← ((38 - (BC))-E)

LDA 8061; A ← M1

LXI H, 8062; HL ← ADR (M2)

ADD M; M1 + M2

ADD E; (M1 + M2) + ((38 - (BC))-E)

STA 8063; M3 ← A

RST 1

Завдання № 2

Затримка 7 мс ± 0,2%

7 мс - це тактів.

Кількість повторень циклу внутрішньої затримки: 17 +10 + (5 +5 +4 +10) * Х +10 = 14000,

LXI H, 0246, 10 тактів

CALL ZZZ, 17 тактів

ZZZ: DCX H; 5 тактів

MOV A, H; 5 тактів

ORA H; 4 такти

JNZ ZZZ, 10 тактів

RET, 10 тактів

Похибка

Завдання № 3

ADR (Y) = 8000H, ADR (1) = 8001H

Y MIN = 00 (при Аср = Amin = 00), Y MAX = 1E (при Аср = Amin = FF).

LXI H, 8001; завдання адреси першого елемента

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

XRA A; обнулення акумулятора

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

MET1: ADD M; A = A + M

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

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

MET2: INX H; привласнити HL адреса наступної комірки

DCR D; зменшення лічильника кол-ва елементів на 1

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

MOV B, A; пересилання молодшого байта результату підсумовування в регістр В

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

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

MOV A, B; Acp → А

MVI D, 04; завдання кількості циклів підсумовування

MET: ADD B; підсумовування

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

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

MX: DCR D; зменшити на 1 кількість підсумовування

JNZ MET; організація циклу

MVI D, 04; завдання зрушень (4 зсуву = поділу на 16)

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

MOV E, A; E ← 5Acp/16

LXI H, 8 0 0 1; завдання адреси першого елемента

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

MOV A, M ; Будемо вважати перший елемент мінімальним

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

JM MET4 ; При S = 1 (AM <0 → A <M) перехід на MET4

MOV A, M , Якщо ж S = 0 (AM ≥ 0 → A ≥ M), зробити поточний елемент найменшим

MET4: INX H ; Привласнити HL адреса наступної комірки

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

JNZ MET3 ; Якщо елемент не останній - продовжити

MOV B, A ; A min B

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

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

MOV A, B; A ← Amin / 4

ADD E; Amin / 4 + 5 Acp / 16 (не більше одного байта)

MOV B, A

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

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

STA 8150 ; Y → 8 00 0H

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

DEL: MOV A, C ; Старший байт в акумулятор (C → A)

RAR ; Циклічний зсув вправо

MOV C, A ; Повернення в C старшого байта

MOV A, B ; Молодший байт в акумулятор (B → A)

RAR ; Циклічний зсув вправо

MOV B, A ; Повернення в B молодшого байта

ORA A ; Обнулення прапора переповнення

DCR D ; Зменшення лічильника зрушень на 1

JNZ D EL ; Якщо зрушення не останній - продовжити

RET

Завдання № 4

Y = (Acp / 4 - Amax / 8) * 2Amin ADR (Y) = 8101H, 8102 Н, 8103 Н, ADR (1) = 8001H

(Acp / 4 - Amax / 8) - 1 байт, 2 Amin - 2 байти, Y - 3 байти (FF * (2 * FF) = FF * 1FE = 1FC02).

LXI H, 8001; завдання адреси першого елемента

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

XRA A; обнулення акумулятора

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

MET1: ADD M; A = A + M

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

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

MET2: INX H; привласнити HL адреса наступної комірки

DCR D; зменшення лічильника кол-ва елементів на 1

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

MOV B, A; пересилання молодшого байта результату підсумовування в регістр В

MVI D, 0 8; завдання зрушень (8 зрушень = розподілу на 256 (Acp / 4))

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

MOV E, A; E ← Acp / 4

LXI H, 8001; завдання адреси першого елемента

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

MOV A, M; вважаємо перший елемент максимальний

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

J Р MET 4; при S = 0 (A - M ≥ 0 → A ≥ M) перехід на MET 4

MOV A, M, якщо ж S = 1 (AM <0 → A <M), зробити поточний елемент максимальним

MET4: INX H; привласнити HL адреса наступної комірки

DCR D; зменшення лічильника кол-ва елементів на 1

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

MOV B, A; A max → B

MVI D, 03; завдання зрушень (3 зсуву = поділу на 8)

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

MOV A, E; A ← Acp / 4

SUB B; Acp / 4 - Amax / 8

MOV E, A ; E ← (Acp / 4 - Amax / 8)

LXI H, 8001; завдання адреси першого елемента

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

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

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

JM MET6 ; При S = 1 (AM <0 → A <M) перехід на MET6

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

MET6: INX H; привласнити HL адреса наступної комірки

DCR D; зменшення лічильника кол-ва елементів на 1

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

ADD A; A = 2 Amin

JNC MET 7; перейти на MET7 якщо немає переповнювання

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

MET 7: MOV D, A; молодший байт 2Amin - в регістр D

MOV H, C; старший байт 2Amin - в регістр Н

CALL MPL; множення молодшого байта 2Amin на (Acp / 4 - Amax / 8)

MOV A, B; молодший байт результату в акумулятор

STA 8101; перший байт результату в клітинку 8101Н

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

MOV D, H; старший байт 2Amin - в регістр D

MOV H, A; старший байт попереднього результату в Н

CALL MPL; множення старшого байта 2Amin на (Acp / 4 - Amax / 8)

MOV A, B; молодший байт результату в акумулятор

ADD H; додати до молодшого байту результати другого множення

переповнення від першого множення

JNC MET 8; перейти на MET8 якщо немає переповнювання

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

ME T 8: STA 8102, другий байт результату в клітинку 8102Н

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

STA 8103; третій байт результату в клітинку 8103Н

RST 1

DEL: MOV A, C; старший байт в акумулятор (C → A)

RAR; циклічний зсув вправо

MOV C, A; повернення в C старшого байта

MOV A, B; молодший байт в акумулятор (B → A)

RAR; циклічний зсув вправо

MOV B, A; повернення в B молодшого байта

ORA A; обнулення прапора переповнення

DCR D; зменшення лічильника зрушень на 1

JNZ D EL; якщо зрушення не останній - продовжити

RET

MPL: LXI B, 0000; обнулення пари НД

MVI L, 08; завантаження лічильника біт

ORA A; скидання прапора переповнення

NXBIT: MOV A, E; завантаження множника в акумулятор

RAR; зсув вправо

MOV E, A; повернення зрушеного множника в регістр Е

JNC NADD; якщо випав біт = 0 → перейти на NADD

MOV A, B; пересилання старшого байта часткової суми в акумулятор

ADD D; підсумовування множимо з частковою сумою

JMP SDV; перейти на SDV

NADD: MOV A, B; пересилання старшого байта часткової суми в акумулятор

SDV: RAR; зрушення вправо часткової суми

MOV B, A; відправити старший байт часткової суми в В

MOV A, C; пересилання молодшого байта часткової суми в С

RAR; зрушення вправо часткової суми

MOV C, A; повернути молодший байт часткової суми в С

DCR L; зменшити кількість біт

JNZ NXBIT; організація циклу

RET







Лист







Змін.

Лист

докум.

Підпис

Дата


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

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

Астрономія | Завдання
35.1кб. | скачати


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