Реферат: Асемблер Контрольна - варіант 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.

еще рефераты
Еще работы по астрономии