Page 276 - 4503
P. 276
retlw b’00000110’; код для 1,
;повертається при ;N=1
retlw b’01011011’; код для 2,
;повертається при ;N=2
retlw b’01001111’; код для 3,
;повертається при ;N=3
retlw b’01100110’; код для 4,
;повертається при ;N=4
retlw b’01101101’; код для 5,
;повертається при ;N=5
retlw b’01111101’; код для 6,
;повертається при ;N=6
retlw b’00000111’; код для 7,
;повертається при ;N=7
retlw b’00111111’; код для 8,
;повертається при ;N=8
retlw b’01101111’; код для 9,
;повертається при ;N=9
;-------------------------------------------
Для виклику підпрограми (функції) дешифрації
SVN_SEG у програмі 8.6 використано команду call
SVN_SEG. У цей момент на збереження у стек занесена адреса
повернення із підпрограми SVN_SEG — наступна після
адреси щойно виконаної команди. Якщо наприклад адресою
команди сall SVN_SEG є h’23’ то у стек занесена адреса
повернення в основну програму h’24’. Повернення у
основну програму відбувається завдяки команді retlw.
Команда addwf PCL,f виконує збільшення вмісту
лічильника команд на величину константи N, яка записана у
робочий регістр ще до виклику підпрограми SVN_SEG. Під
час виконання цієї команди вміст РС, збільшується на
одиницю, адже таке відбувається при виконанні більшості
команд (розділ 5.1.2). Отже, у сумі вміст лічильника одразу
276