Реферат: Асемблер Контрольна - варіант 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, в ; Запис вмісту регістра в в акумулятор LXIH, 8021Н ; Запис в пару регістрів HL адреси операнда М2 ADDM; Додавання до вмісту акумулятора значення М2 ADDB; Додавання до вмісту акумулятора значення регістра В STA8022Н ; Запис результату обчислень функції в М3 RST1 ;Припинити виконання програми Блок-схема до даної програми зображена на рис.1 в додатку 1. Задача № 2 . Розробіть алгоритм і напишіть програму на мові Асемблера для формування часової затримки за допомогою мікропроцесора КР580ВМ80А. Наведіть розрахунок часу затримки і величини похибки. Час затримки 100мс, максимальна похибка 0,7%, А – кількість циклів. Для розрахунку часової затримки наведем програму з тактами затримки кожної команди. Пара регістрів DЕ – лічильник кількості циклів. 8000Н-800СН – машинні коди програми; MS: DCX в ; 5 MOV A, E ; 5 ORA в ; 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 ; Логічне додавання регістру в до акумулятора 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. Регістр в – тимчасове збереження результату та множеного; 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, в ; Пересилання старшого байту суми в А 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 в ; 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 в ; POP B ; RST 1 ; Припинення виконання програми Блок-схема до даної програми зображена на рис.5 в додатку 3. Структура програми зображена на рис.6 в додатку 3. |