ATUS, RP0STATUS, RP1MACRO; вибір друга банкаSTATUS, RP0STATUS, RP1MACRO; вибір третього банкаSTATUS, RP0STATUS, RP1
; ***************************************** *****************
; ЗНАХОДЖЕННЯ СЛУЧАЙНОГО ЗНАЧЕННЯ
; ***************************************** *****************
RND MACRO; виконати макрос RND
RLF RANDOM, W; зрушення змінної RANDOM на розряд вліво
RLF RANDOM, W; зрушення змінної RANDOM на розряд вліво
BTFSC RANDOM, 4; перевіримо біт 4 регістра RANDOM на 0 значення
XORLW 1; побітного іскл-або акумулятора і 1
BTFSC RANDOM, 5; перевіримо біт 5 регістра RANDOM на 0 значення
XORLW 1; побітного іскл-або акумулятора і 1
BTFSC RANDOM, 3; перевіримо біт 3 регістра RANDOM на 0 значення
XORLW 1; побітного іскл-або акумулятора і 1
MOVWF RANDOM; значення акумулятора в регістр RANDOM
ENDM; вийти з макросу
; ***************************************** *****************
; ЗАПОВНЕННЯ МАСИВУ А випадкові числа
; ***************************************** *****************
START; початок програми
BANK0; вибір нульового банку
MOVLW 0X1F; помістимо в акумулятор кількість повторів заповнення
MOVWF TEMP; 0X0F в регістр TEMP
MOVLW 0X21; помістимо в акумулятор адреса першого осередку
MOVWF FSR; вкажемо адресу першої осередки в регістрі FSR
M1:; мітка M1
RND; виконаємо макрос RND
MOVF RANDOM; помістимо випадкове число в акумулятор
MOVWF INDF; помістимо це число в осередок з адресою з регістра FSR
INCF FSR; збільшимо значення адреси на 1
DECFSZ TEMP; віднімаємо 1 від регістра TEMP і перевіримо на
GOTO M1; якщо TEMP gt; 0 перейдемо на мітку M1
; ***************************************** *****************
; ПОШУК максимального значення
; ***************************************** *****************
MOVLW 0X21; покладемо в акумулятор адреса першого осередку
MOVWF FSR; запишемо його в FSR
MOVF INDF, W; прочитаємо значення з комірки за адресою FSR
MOVWF MAX; покладемо значення з комірки в змінну MAX
MOVLW 0X20; покладемо в акумулятор кількість перевіряються осередків
MOVWF TEMP; запишемо в змінну TEMP
M2; мітка M2
DECFSZ TEMP; віднімаємо 1 від регістра TEMP і перевіримо на 0
GOTO M4; перехід на мітку М4
GOTO M3; перехід на мітку М3
M4; мітка M2
INCF FSR; перенход на наступну комірку
MOVF INDF, W; покладемо значення INDF в акумулятор
SUBWF MAX, W; віднімемо від максимального значення
BTFSC STATUS, C; перевіримо що більше
GOTO M2; перехід на мітку М2
MOVF INDF, W; копіюємо поточну комірку непрямої адресації в акумулятор
MOVWF MAX; покладемо це значення в змінну MAX
GOTO M2; якщо TEMP gt; 0 перейдемо на мітку M2
M3; мітка M3
; ***************************************** *****************
; КІНЕЦЬ ПРОГРАМИ
; ***************************************** *****************
END
4.2 Налагодження програми
На малюнку 3 показано вікно процесу результату компілювання отриманої програми. Як видно синтаксис мови Assembler не порушений, отже, помилок компілятором не виявлено.
Отримані попередження (Warning [203]) говорять про некоректне розставленими табуляцій в програмному коді. Однак на якість виконання самої програми це ніяк не впливає.
Малюнок 3 - Результат компілювання написаної програми
На малюнку 4 представлено отримане програмне забезпечення в режимі налагодження:
Малюнок 4 - Заповнення осередків з 0Х21 по 0Х3F
На малюнку 4 мож...