| |
Рисунок 6.4 - Алгоритм програми 5
Текст програми:
| CSEG | ||
| ORG 2000h | ||
| MOV PSW, #08H | ; Вибір 1-го Банку РЗП | |
| MOV R2, #8 | ; Лічильник циклів => R2 | |
| MOV DPTR,#5000h | ; Початкова адреса => DPTR | |
| MOV R0, #0 | ; Початкова адреса Банку 0 | |
| MET: | MOV A, @R0 | ; Пересилання байта з РЗП |
| MOVX @DPTR, A | ; у ВПД | |
| INC DPTR | ; Нарощування адреси ВПД | |
| INC R0 | ; Нарощування адреси РПД | |
| DJNZ R2, MET | ; Зменшення лічильника й повтор |
6. Програма виконує запис коду (установленого на перемикачах) на згадку даних, починаючи з адреси 3000h. Комбінація, записувана на згадку, визуализується на лінійці світодіодів. Затримка між записом сусідніх комбінацій 3 секунди. Алгоритм програми представления на рисунку 6.5
Текст програми:
| INDequ0fff1h | ;IND відповідає адресі лінійки світодіодів | |
| keyequ0fff2h | ;key – адреса лінійки перемикачів | |
| Pamequ3000h | ;Pam – адреса області пам'яті для запису даних | |
| Delay1s equ0220h | ;Delay1s відповідає адресі затримки 1 сек. | |
| cseg | ;сегмент коду | |
| org2000h | ;початкова адреса програми | |
| movr3, #0 | ;регістр R3 виконує функцію лічильника | |
| mov dptr, #Pam | ;завантаження адреси області пам'яті для запису даних | |
| m1: | Push dpl | ;збереження мол. частини DPTR |
| push dph | ;збереження ст. частини DPTR | |
| call Delay1s | ;реалізація затримки 3 сек. | |
| call Delay1s | ||
| call Delay1s | ||
| movdptr, #key | ;завантаження адреси лінійки перемикачів | |
| movxa, @dptr | ;збереження даних з перемикачів в А | |
| popdph | ;відновлення ст. частини DPTR | |
| popdpl | ;відновлення мол. частини DPTR | |
| movx@dptr,a | ;збереження даних з перемикачів у пам'яті | |
| pushdpl | ;збереження мол. частини DPTR | |
| pushdph | ;збереження ст. частини DPTR | |
| movdptr,#IND | ;завантаження адреси лінійки світодіодів | |
| movx@dptr,a | ;візуалізація даних з перемикачів | |
| popdph | ;відновлення ст. частини DPTR | |
| popdpl | ;відновлення мол. частини DPTR | |
| incdptr | ;збільшення адреси пам'яті для запису даних | |
| incr3 | ;збільшення лічильника | |
| CJNEr3,#10, m1 | ;повторення циклу 10 разів | |
| loop: | jmploop | ;кінець програми (нескінченний цикл) |
Рисунок 6.5 – Алгоритм програми 6
7. Операції зі стеком
Текст програми:
| cseg | ; директива початку сегмента коду |
| org 2000h | ; початкова адреса програми |
| PUSH PSW | ; збереження в стеці PSW |
| PUSH ACC | ; збереження в стеці акумулятора |
| PUSH B | ; збереження в стеці B |
| PUSH DPL | ; збереження в стеці DPTR |
| PUSH DPH | |
| MOV PSW, #00H | ; вибір Банку РЗП 0 |
| POP DPH | ; відновлення DPTR |
| POP DPL | |
| POP B | ; відновлення B |
| POP ACC | ; відновлення акумулятора |
| POP PSW | ; відновлення PSW |
8. Використання арифметичних операцій. Скласти два двійкових багатобайтних числа. Обоє доданків розташовані в РПД починаючи з молодшого байта. Початкова адреса доданків в R0 й R1. Формат що складають (довжина в байтах) заданий в R2. Алгоритм програми представления на рисунку 6.6
Текст програми:
| cseg | ||
| org 2000h | ||
| mov DPTR, #0FFF1h | ;для виводу на світодіоди | |
| loop: | mov a,@R0 | ;адреса першого доданка |
| addc a,@R1 | ;додавання | |
| mov @R0,A | ; збереження суми частин | |
| movx @DPTR,A | ;відображення суми | |
| inc R0 | ;наступні байти доданків | |
| inc R1 | ||
| DJNZ R2,loop | ;формат доданків заданий в R2 |
| |
Рисунок 6.6 – Алгоритм програми 8
9. Програма виконує множення цілого двійкового числа довільного формату на константу 157. Вихідне число зберігається в РПД, адреса його молодшого байта завантажений у регістр R0. Формат числа (довжина в байтах) утримується в регістрі R1. Алгоритм програми представления на рисунку 6.7
10. Рисунок 6.7 – Алгоритм програми 9
| |
Текст програми:
| cseg | ;сегмент коду | |
| org 2000h | ;початкова адреса програми | |
| mov DPTR,#0FFF1h | ;завантаження адреси лінійки світодіодів | |
| mov A,#0 | ;обнуління акумулятора | |
| loop: | add A,@R0 | ;завантаження множеного |
| mov B,#157 | ;завантаження множника | |
| mul AB | ;операція множення | |
| mov @R0,A | ;запис мол. байта | |
| movx @DPTR,A | ;візуалізація мол. байта на світодіодах | |
| call 0220h | ;затримка 1 сек. | |
| inc R0 | ;збільшення адреси | |
| mov A,B | ;пересилання ст. байта результату в А | |
| movx @DPTR,A | ;візуалізація ст. байта на світодіодах | |
| call 0220h | ;затримка 1 сек. | |
| xch @R0,A | ;формування чергового байта | |
| DJNZ R1,loop | ;зациклення, якщо не всі байти помножені |
11. Програма виконує перетворення двійкового числа, яке міститься в акумуляторі в BCD-код.
Текст програми:
| cseg | ;сегмент коду |
| org 2000h | ;початкова адреса програми |
| MOV A, R5 | ;пересилання операнда в Асс |
| MOV B, #100 | ;дільник 100 для обчислення сотень у числі |
| DIV AB | ;Асс містить число сотень (ст. тетраду) |
| MOV R6, A | ;пересилання числа сотень в R6 |
| MOV A, B | ;пересилання залишку вихідного числа в Асс |
| MOV B, #10 | ;дільник 10 для обчислення числа десятків у числі |
| DIV AB | ;число десятків утримується в Ас, число одиниць - в B |
| SWAP A | ;розміщення числа десятків у старшу тетраду Асс |
| ADD A, B | ;розміщення числа одиниць у молодшій тетраді Асс |
| MOV R5, A | ;збереження результату в R5 |
12. Програма повинна використати логічні операції (і, або, не), уважати стан перемикачів і виконати над ним наступні дії (((not a)and25)or20) xor ((not a)and25), результат візуалізувати на лінійці світодіодів.
Текст програми:
| Button equ 0fff2h | ;button – адресі перемикачів |
| Diod equ 0fff1h | ;diod відповідає адресі світодіодів |
| cseg | ;директива початку сегмента коду |
| movdptr,#button | ;завантаження в dptr адреси перемикачів |
| movxa,@dptr | ;збереження стану перемикачів в А |
| clpa | ;інвертування А |
| movr0,#25 | ;завантаження 25 в r0 |
| anla,r0 | ;and акумулятора й умісту регістра r0 |
| movr0,a | ;збереження результату в r0 |
| movr1,#20 | ;завантаження в r1 значення 20 |
| orla,r1 | ;or акумулятора й r1 |
| xrla,r0 | ;xor акумулятора й умісту r0 |
| movdptr,#diod | ;завантаження в dptr адреси світодіодів |
| movx @dptr,a | ;відображення на лінійці світодіодів |
| ;кінцевого значення |
13. Установити в одиничний стан 1, 2, 4, 6, 7 біти порту А стенда УУМС-2
Текст програми:
| port equ0fffch | ;port адреса порту А |
| regcon equ0ffffh | ;regcon адреса регістра керування |
| cseg | ;директива початку сегмента коду |
| mov a,#10010000b | ;порт А – вивід, У и С – уведення |
| movdptr,#regcon | ;завантаження адреси регістра керування |
| movx @dptr,a | ;настроювання ППИ |
| mov dptr,#port | ;завдання адреси порту А |
| mov a,#11010110b | ;установлюємо відповідні біти |
14. Записати "0" до 0,1, 4, 5, 7 бітів порту А стенда УУМС-2
Текст програми:
| port equ 0fffch | ;port адреса порту А |
| port equ 0fffdh | ;port |
| regcon equ 0ffffh | ;regcon адреса регістра керування |
| cseg | ;директива початку сегмента коду |
| mov a,#10010000b | ;порт А – вивід, У и С – уведення |
| movdptr,#regcon | ;завантаження адреси регістра керування |
| movx @dptr,a | ;настроювання ППИ |
| movdptr,#port | ;завантаження адреси порту В |
| movA,@dptr | ;уведення інформації через порт В |
| mov r1,#01001100b | ;вказівка бітів для скидання |
| anla,r1 | ;скидання зазначених бітів |
| movx@dptr,#port | ;завдання адреси порту А |
| movx@dptr,a | ;вивід інформації через порт А |
15. Проінвертувати інформацію з порту В у відповідні одиничні біти акумулятора стенда УУМС-2
Текст програми:
| port equ 0fffdh | ;port |
| regcon equ 0ffffh | ;regcon адреса регістра керування |
| cseg | ;директива початку сегмента коду |
| mov a,#10010000b | ;порт А – вивід, У и С – уведення |
| movdptr,#regcon | ;завантаження адреси регістра керування |
| movx @dptr,a | ;настроювання ППИ |
| movdptr,#port | ;завантаження адреси порту В |
| movA,@dptr | ;уведення інформації через порт В |
| movr0,a | ;зберігаємо уведене значення |
| mova,#01010011b | ;слово відповідно до якого |
| ;буде зроблена інверсія | |
| xrla,r0 | ;інверсія значення порту по Асс |
| movx@dptr,#port | ;завдання адреси порту А |
| movx@dptr,a | ;вивід інформації через порт А |
15. Прочитати стан перемикачів, зберегти в А, проінвертувати 0, 3, 6, 7 біти акумулятора й видати на лінійку світодіодів.