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

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

Задача № 1

.
Розробіть алгоритм і напишіть програму на мові Асемблера для обчислення функції:


М3 = (С - М1) + (Е – (50)16) + (D + М2)


, де A, B, C, D, E, H, L– регістри загального призначення мікропроцесора КР580ВМ80А; М1, М2 – операнди, розташовані в пам’яті; М3 – результат обчислень, розташований у пам’яті.


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


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


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


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


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


MOVA, C ; Запис вмісту регістра С в акумулятор


LXIH, 8020Н ; Запис в пару регістрів HL адреси операнда М1


SUBM ; Віднімання від акумулятора значення операнда М1


MOVB, A; Перенесення результату з акумулятора в регістр В


MOVA, E; Запис вмісту регістра Е в акумулятор


SUI 50Н ; Віднімання від акумулятора значення 50 в 16-му коді


ADDB; Додавання до вмісту акумулятора значення регістра В


MOVB, A ; Перенесення результату з акумулятора в регістр В


MOVA, D ; Запис вмісту регістра D в акумулятор


LXIH, 8021Н ; Запис в пару регістрів HL адреси операнда М2


ADDM; Додавання до вмісту акумулятора значення М2


ADDB; Додавання до вмісту акумулятора значення регістра В


STA8022Н ; Запис результату обчислень функції в М3


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


Блок-схема до даної програми зображена на рис.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: DCXD ; Зменшення пари регістрів DЕ на 1


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


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


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


RЕТ ; Вихід


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


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


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


Задача № 3

.
Розробіть алгоритм і напишіть програму на мові Асемблера для обчислення виразу:


Y=( Amax/ 2 + 5 * Amin / 16 ) / 4


за допомогою мікропроцесора КР580ВМ80А, де Amax, Amin – максимальнеі мінімальне значення для масиву однобайтних чисел без знаку об’ємом N=64 байт, який зберігається в пам’яті з початковою адресою Addr0.


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


Розподіл регістрів загального призначення:


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


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


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


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


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


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


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


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


Визначимо найбільше і найменше значення виразу Y:


Ymax = ( FF / 2 + 5 * FF / 16 ) / 4 = 2E


Ymin = ( 0 / 2 + 5 * 0 / 16 ) / 4 = 0


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


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


A

max

:

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


; масиву Addr016


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


LDAAddr016 ; Запис в акумулятор першого елементу масиву


MS: INXH ; Визначення адреси наступного елементу масиву


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


; масиву


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


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


; масиву


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


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


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


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


MS1: ORAA; Логічне додавання вмісту акумулятора для


; обнулення TC


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


STAAddr(Amax)16; Запис в комірку Addr(Amax)16 значення Amax/2


A

min

:

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


; масиву Addr016


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


LDAAddr016 ; Запис в акумулятор першого елементу масиву


MS2: INXH ;Визначення адреси наступного елементу масиву


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


; масиву


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


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


; масиву


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


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


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


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


MS3: STAAddr(Amin)16; Запис в комірку Addr(Amin)16 значення Amin


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


; А =Amin +Amin = 2Amin


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


; А = 2Amin + 2Amin = 4Amin


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


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


;А = 4Amin + Amin = 5Amin


MVIB, 04 ; Ділення вмісту акумулятора на 16


MS4: ORAA ;


RAR ;


DCRB ;


JNZMS4 ;


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


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


MVIB, 02 ;Ділення вмісту акумулятора на 4


MS5:ORAA ;


RAR ;


DCRB ;


JNZMS5 ;


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


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


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


Задача №

4

.
Розробіть алгоритм і напишіть програму на мові Асемблера для обчислення виразу:


Y= ( 3 * Aсер-Amin / 2 ) * ( Amax/ 4 )


за допомогою мікропроцесора КР580ВМ80А, де Amax, Amin, Aсер – максимальне, мінімальне і середне значення для масиву однобайтних чисел без знаку об’ємом N=64

байт, який зберігається в пам’яті з початковою адресою Addr0.


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


Розподіл регістрів загального призначення:


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


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


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


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


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


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


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


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


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


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


4. 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

сер

:

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


; масиву Addr016


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


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


MOVD, A ;Очищення лічильника числа переповнення


MS: ADDM ; Додавання до вмісту акумулятора Аі


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


INRD ; Збільшення лічильника переносу на 1


MS1: INXH ; Визначення адреси наступного елементу масиву


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


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


MOVE, A ; Молодший байт суми


MS2: MVIC, 06 ; Ділення суми на 64


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


; обнулення TC


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


RAR ;


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


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


RAR ;


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


DCRС ;


JNZMS2 ;


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


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


MOVE, A ; Пересилання результату в Е


A

min

:

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


; масиву Addr016


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


LDAAddr016 ; Запис в акумулятор першого елементу масиву


MS3: INXH ; Визначення адреси наступного елементу масиву


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


; масиву


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


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


; масиву


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


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


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


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


MS4: ORAA ;Логічне додавання вмісту акумулятора для


; обнулення TC


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


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


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


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


MOVD, A ; Пересилання результату в D


A

max

:

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


; масиву Addr016


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


LDAAddr016 ; Запис в акумулятор першого елементу масиву


MS5: INXH ; Визначення адреси наступного елементу масиву


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


; масиву


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


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


; масиву


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


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


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


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


MS6: MVIB, 02 ;Ділення вмісту акумулятора на 4


ORAA ;


MS7: RAR ;


DCRB ;


JNZMS7 ;


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


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


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


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


; обнулення TC


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


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


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


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


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


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


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


JMPMS10 ; Перехід до зсуву суми часткових добутків


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


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


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


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


; в регістр В


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


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


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


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


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


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


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


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


;акумулятор


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


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


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


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


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


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


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


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


Задача № 5

.
Розробіть драйвер для виведення інформації на зовнішній пристрій у мікропроцесорній системі на базі мікропроцесорної серії К580.


Наведіть структурну схему організації виведення інформації, алгоритм виведення, програму драйвера на мові Асемблера.


Виконати завдання за допомогою паралельного інтерфейсу К580ВВ55, який програмується, з розрядністю даних рівній 11.


Алгоритм програми:


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


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


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


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


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


PUSH D ;


PUSH H ;


PUSH PSW ;


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


OUT RU ;


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


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


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


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


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


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


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


OUT PORT C ;


MVI A, 00000000 ;


OUT PORT C ;


M1: INPORTC ; Перевірка готовності


RAL ;


JNC M1 ;


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


POP H ;


POP D ;


POP B ;


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


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


Структура програми зображена на рис.6 в додатку 3.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Асемблер Контрольна - варіант 1

Слов:2236
Символов:17214
Размер:33.62 Кб.