Реферат: Асемблер Контрольна - варіант 1 - Refy.ru - Сайт рефератов, докладов, сочинений, дипломных и курсовых работ

Асемблер Контрольна - варіант 1

Рефераты по астрономии » Асемблер Контрольна - варіант 1

Задача № 1 . Розробіть алгоритм і напишіть програму на мові Асемблера для обчислення функції: М3 = (С - М1) + (Е – (50)16) + (D + М2) , де A, B, C, D, E, H, L – регістри загального призначення мікропроцесора КР580ВМ80А; М1, М2 – операнди, розташовані в пам’яті; М3 – результат обчислень, розташований у пам’яті.

Регістр В – тимчасове збереження поточного результату.

Розподіл комірок пам’яті:

8000Н-8014Н – машинні коди програми;

8020Н, 8021Н – адреси операндів М1 та М2;

8022Н – адреса результату М3.


MOV A, C ; Запис вмісту регістра С в акумулятор LXI H, 8020Н ; Запис в пару регістрів HL адреси операнда М1 SUB M ; Віднімання від акумулятора значення операнда М1 MOV B, A ; Перенесення результату з акумулятора в регістр В MOV A, E ; Запис вмісту регістра Е в акумулятор SUI 50Н ; Віднімання від акумулятора значення 50 в 16-му коді ADD B ; Додавання до вмісту акумулятора значення регістра В MOV B, A ; Перенесення результату з акумулятора в регістр В MOV A, D ; Запис вмісту регістра D в акумулятор LXI H, 8021Н ; Запис в пару регістрів HL адреси операнда М2 ADD M ; Додавання до вмісту акумулятора значення М2 ADD B ; Додавання до вмісту акумулятора значення регістра В STA 8022Н ; Запис результату обчислень функції в М3 RST 1 ; Припинити виконання програми


Блок-схема до даної програми зображена на рис.1 в додатку 1.


Задача № 2 . Розробіть алгоритм і напишіть програму на мові Асемблера для формування часової затримки за допомогою мікропроцесора КР580ВМ80А. Наведіть розрахунок часу затримки і величини похибки.

Час затримки 100мс, максимальна похибка 0,7%, А – кількість циклів.

Для розрахунку часової затримки наведем програму з тактами затримки кожної команди. Пара регістрів DЕ – лічильник кількості циклів. 8000Н-800СН – машинні коди програми;


MS: DCX D ; 5

MOV A, E ; 5

ORA D ; 7

JNZ MS ; 10

RЕТ ; 10

LXI D, **** ; 10

CALL MS ; 17


Розрахуємо кількість циклів при часі затримки 100 мс=100000 мкс: 100000 = 0,5 * ( А * ( 5 + 5 + 7 + 10 ) + 10 + 10 + 17 ) А = 740610 = 1СЕЕ16 Мінімальний час затримки (А=1): Тmin = 32 мкс Максимальний час затримки (А=0): Тmax = 884741 мкс Даний за умовою час затримки входить в межі часової затримки наведеної вище програми. Перевіримо час затримки для вирахуваної кількості циклів: Т = 0,5 * ( 7406 * 27 + 37 ) = 99999,5 мкс Знайдемо похибку обчислень: b=(100000–99999,5)*100%/100000=0,05% Отримана похибка меньша, ніж максимально допустима. Після проведення обчислень виконаємо програму:


MS: DCX D ; Зменшення пари регістрів DЕ на 1

MOV A, E ; Пересилання в акумулятор вмісту регістра Е

ORA D ; Логічне додавання регістру D до акумулятора

JNZ MS ; Організація циклу

RЕТ ; Вихід

LXI D, 1СЕЕН ; Запис в пару регістрів DЕ числа 1СЕЕН

CALL MS ; Виклик підпрограми


Блок-схема до даної програми зображена на рис.2 в додатку 1.


Задача № 3 . Розробіть алгоритм і напишіть програму на мові Асемблера для обчислення виразу: Y = ( Amax / 2 + 5 * Amin / 16 ) / 4 за допомогою мікропроцесора КР580ВМ80А, де Amax, Amin – максимальне і мінімальне значення для масиву однобайтних чисел без знаку об’ємом N=64 байт, який зберігається в пам’яті з початковою адресою Addr0.

Результат обчислень потрібно записати в пам’ять за адресою Addr(Rez). Визначіть найбільше і найменше значення виразу Y. Розподіл регістрів загального призначення:

Пара регістрів HL – адреса Addr елемента масиву;

Регістр В – лічильник елементів масиву і, кількість циклів при діленні.

Розподіл комірок пам’яті:

8000Н-804FН – машинні коди програми;

8050Н-808FН– масив чисел;

8090Н – адреса Addr (Amax)16;

8091Н – адреса Addr (Amin)16;

8092Н – адреса результату Addr(Rez)16.

Визначимо найбільше і найменше значення виразу Y: Ymax = ( FF / 2 + 5 * FF / 16 ) / 4 = 2E Ymin = ( 0 / 2 + 5 * 0 / 16 ) / 4 = 0

Обрахувавши Ymax та Ymin бачимо, що результат не виходить за межі одного байту, тому його можна записати в одну комірку.

Розробимо програму для розрахунку цієї функції:


Amax: LXI H, Addr016 ; Запис в пару регістрів HL адреси першого елементу

; масиву Addr016

MVI B, 64 ; Завантаження в регістр В кількості елементів масиву

LDA Addr016 ; Запис в акумулятор першого елементу масиву MS: INX H ; Визначення адреси наступного елементу масиву

CMP M ; Порівняння вмісту акумулятора з і-м елементом

; масиву

DCR B ; Зменшення кількості елементів на 1

JZ MS1 ; Вихід з циклу при проходженні всіх елементів

; масиву

JNC MS ; Повернення на початок циклу, якщо Аi < Amax

MOV A, M ; Запис в акумулятор поточного максимального

; значення масиву

JC MS ; Повернення на початок циклу, якщо Аi >Amax MS1: ORA A ; Логічне додавання вмісту акумулятора для

; обнулення TC

RAR ; Ділення вмісту акумулятора на 2

STA Addr(Amax)16; Запис в комірку Addr(Amax)16 значення Amax/2 Amin: LXI H, Addr016 ; Запис в пару регістрів HL адреси першого елементу

; масиву Addr016

MVI B, 64 ; Завантаження в регістр В кількості елементів масиву

LDA Addr016 ; Запис в акумулятор першого елементу масиву MS2: INX H ; Визначення адреси наступного елементу масиву

CMP M ; Порівняння вмісту акумулятора з і-м елементом

; масиву

DCR B ; Зменшення кількості елементів на 1

JZ MS3 ; Вихід з циклу при проходженні всіх елементів

; масиву

JC MS2 ; Повернення на початок циклу, якщо Аi > Amin

MOV A, M ; Запис в акумулятор поточного мінімального

; значення масиву

JNC MS2 ; Повернення на початок циклу, якщо Аi < Amin MS3: STA Addr(Amin)16; Запис в комірку Addr(Amin)16 значення Amin

ADD A ; Збільшення вмісту акумулятора в два рази

; А = Amin + Amin = 2Amin

ADD A ; Збільшення вмісту акумулятора в два рази

; А = 2Amin + 2Amin = 4Amin

LXI H, Addr(Amin)16; Запис в пару регістрів HL адреси Addr(Amin)16

ADD M ; Додавання до вмісту акумулятора Amin

;А = 4Amin + Amin = 5Amin

MVI B, 04 ; Ділення вмісту акумулятора на 16 MS4: ORA A ;

RAR ;

DCR B ;

JNZ MS4 ;

LXI H, Addr(Amax)16; Запис в пару регістрів HL адреси Addr(Amax)16

ADD M ; Додавання до вмісту акумулятора Amax/2

MVI B, 02 ; Ділення вмісту акумулятора на 4 MS5: ORA A ;

RAR ;

DCR B ;

JNZ MS5 ;

STA Addr(Rez)16 ; Запис в комірку Addr(Rez)16 значення Y

RST 1 ; Припинити виконання програми


Блок-схема до даної програми зображена на рис.3 в додатку 2.


Задача № 4. Розробіть алгоритм і напишіть програму на мові Асемблера для обчислення виразу: Y = ( 3 * Aсер - Amin / 2 ) * ( Amax / 4 ) за допомогою мікропроцесора КР580ВМ80А, де Amax, Amin, Aсер – максимальне, мінімальне і середне значення для масиву однобайтних чисел без знаку об’ємом N=64 байт, який зберігається в пам’яті з початковою адресою Addr0.

Результат обчислень потрібно записати в пам’ять за адресою Addr(Rez). Визначіть найбільше і найменше значення виразу Y. Розподіл регістрів загального призначення:

Пара регістрів HL – адреса Addr елемента масиву;

Регістр В – лічильник елементів масиву і, кількість циклів при діленні;

Регістр Е – тимчасове збереження результату та множника;

Регістр D – тимчасове збереження результату та множеного;

Регістр С – збереження суми часткових добутків;

Регістр L – лічильник біт.

Розподіл комірок пам’яті:

8000Н-807EН – машинні коди програми;

8080Н-811FН– масив чисел;

8120Н – адреса молодшого байту результату Addr(Rez1)16;

8121Н – адреса старшого байту результату Addr(Rez2)16.

Визначимо найбільше і найменше значення виразу Y: Ymax = ( 3 * FF – FF / 2 ) * ( FF / 4 ) = 9D02 Ymin = ( 3 * 0 – 0 / 2 ) * ( 0 / 4 ) = 0

Отримали, що результат входить в межі двох байт, тому результат потрібно записувати в двох комірках Addr(Rez1)16-молодший байт та Addr(Rez2)16-старший байт.

Розробимо програму для розрахунку цієї функції:


Aсер: LXI H, Addr016 ; Запис в пару регістрів HL адреси першого елементу

; масиву Addr016

MVI B, 64 ; Завантаження в регістр В кількості елементів масиву

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

MOV D, A ; Очищення лічильника числа переповнення MS: ADD M ; Додавання до вмісту акумулятора Аі

JNC MS1 ; Якщо немає переносу, то перехід на MS1

INR D ; Збільшення лічильника переносу на 1 MS1: INX H ; Визначення адреси наступного елементу масиву

DCR B ; Зменшення кількості елементів на 1

JNZ MS ; Організація циклу

MOV E, A ; Молодший байт суми MS2: MVI C, 06 ; Ділення суми на 64

ORA A ; Логічне додавання вмісту акумулятора для

; обнулення TC

MOV A, D ; Пересилання старшого байту суми в А

RAR ;

MOV D, A ; Пересилання старшого байту суми в D

MOV A, Е ; Пересилання молодшого байту суми в А

RAR ;

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

DCR С ;

JNZ MS2 ;

ADD A ; Збільшення вмісту акумулятора А=Aсер+Aсер=2Aсер

ADD E ; Додавання до акумулятора вмісту Е А=3Aсер

MOV E, A ; Пересилання результату в Е Amin: LXI H, Addr016 ; Запис в пару регістрів HL адреси першого елементу

; масиву Addr016

MVI B, 64 ; Завантаження в регістр В кількості елементів масиву

LDA Addr016 ; Запис в акумулятор першого елементу масиву MS3: INX H ; Визначення адреси наступного елементу масиву

CMP M ; Порівняння вмісту акумулятора з і-м елементом

; масиву

DCR B ; Зменшення кількості елементів на 1

JZ MS4 ; Вихід з циклу при проходженні всіх елементів

; масиву

JC MS3 ; Повернення на початок циклу, якщо Аi > Amin

MOV A, M ; Запис в акумулятор поточного мінімального

; значення масиву

JNC MS3 ; Повернення на початок циклу, якщо Аi < Amin MS4: ORA A ; Логічне додавання вмісту акумулятора для

; обнулення TC

RAR ; Ділення вмісту акумулятора на 2

MOV B, A ; Пересилання в В Amin/2

MOV A, E ; Запис в акумулятор 3Aсер

SUB B ; Віднімання вмісту В від А: А=3Aсер-Amin/2

MOV D, A ; Пересилання результату в D Amax: LXI H, Addr016 ; Запис в пару регістрів HL адреси першого елементу

; масиву Addr016

MVI B, 64 ; Завантаження в регістр В кількості елементів масиву

LDA Addr016 ; Запис в акумулятор першого елементу масиву MS5: INX H ; Визначення адреси наступного елементу масиву

CMP M ; Порівняння вмісту акумулятора з і-м елементом

; масиву

DCR B ; Зменшення кількості елементів на 1

JZ MS6 ; Вихід з циклу при проходженні всіх елементів

; масиву

JNC MS5 ; Повернення на початок циклу, якщо Аi < Amax

MOV A, M ; Запис в акумулятор поточного максимального

; значення масиву

JC MS5 ; Повернення на початок циклу, якщо Аi >Amax MS6: MVI B, 02 ; Ділення вмісту акумулятора на 4

ORA A ; MS7: RAR ;

DCR B ;

JNZ MS7 ;

MOV E, A ; Запис результату в Е Amax/4

LXI B, 0000 ; Очищення В і С

MVI L, 08 ; Завантаження лічильника біт (регістр L)

ORA A ; Логічне додавання вмісту акумулятора для

; обнулення TC MS8: MOV A, E ; Завантаження множника в акумулятор з Е

RAR ; Зсув аналізуємого біта множника

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

JNC MS9 ; Перехід на мітку MS9, якщо біт множника = 0

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

; в акумулятор

ADD D ; Додавання множеного до суми часткових добутків

JMP MS10 ; Перехід до зсуву суми часткових добутків MS9: MOV A, B ; Пересилання старшого байта суми часткових добутків

; в акумулятор MS10:RAR ; Зсув суми часткових добутків

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

; в регістр В

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

; добутків в акумулятор

RAR ; Зсув суми часткових добутків

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

; добутків в регістр С

DCR L ; Зменшення лічильника на 1

JNZ MS8 ; Організація циклу

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

;акумулятор

STA Addr(Rez1)16; Пересилання молодшого байта результату

; в комірку Addr(Rez1) 16

MOV A, В ; Пересилання старшого байта результату

; в акумулятор

STA Addr(Rez2) 16; Пересилання старшого байта результату

; в комірку Addr(Rez2) 16

RST 1 ; Припинити виконання програми


Блок-схема до даної програми зображена на рис.4 в додатку 2.


Задача № 5. Розробіть драйвер для виведення інформації на зовнішній пристрій у мікропроцесорній системі на базі мікропроцесорної серії К580. Наведіть структурну схему організації виведення інформації, алгоритм виведення, програму драйвера на мові Асемблера. Виконати завдання за допомогою паралельного інтерфейсу К580ВВ55, який програмується, з розрядністю даних рівній 11. Алгоритм програми:

Видати сигнал пуску;

Чекання сигналу готовності;

Зчитування інформації з портів А та В.

8000Н-8024Н – машинні коди програми.


PUSH B ; Збереження стану пар регістрів

PUSH D ;

PUSH H ;

PUSH PSW ;

MVI A, 81H ; Настройка периферійного пристрою

OUT RU ;

LXI H, 8100H ; Запис в пару HL адреси регістра А

MOV A, M ; Пересилання даних в акумулятор

OUT PORT A ; Пересилання даних на регістр порта А

INX H ; Визначення адреси регістра В

MOV A, M ; Пересилання даних в акумулятор

OUT PORT B ; Пересилання даних на регістр порта В

MVI A, 00000001 ; Запуск стробуючого сигналу

OUT PORT C ;

MVI A, 00000000 ;

OUT PORT C ; M1: IN PORT C ; Перевірка готовності

RAL ;

JNC M1 ;

POP PSW ; Відновлення стану пар регістрів

POP H ;

POP D ;

POP B ;

RST 1 ; Припинення виконання програми


Блок-схема до даної програми зображена на рис.5 в додатку 3. Структура програми зображена на рис.6 в додатку 3.