Рисунок 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 біти акумулятора й видати на лінійку світодіодів.