При использовании расширенной системы команд - компилятор будет
очень тривиальным
Добавляется стек данных через индексный регистр FSR2
И все команды начинают работать с этим локальным "окном"
Если зафиксировать банк 0 (для Q серии - банк 5) в регистре банка BSR - то получаем 256 байт глобальных переменных
а в основном используем локальные переменные через окно FSR2
довольно оригинально получаем C-подобные подпрограммы
; div word on byte unsigned
; input: divident - word, divider - byte stack
; output: quotient - word, remainder - byte stack
locals set 2
dividentH set locals+3
dividentL set locals+2
divider set locals+1
remainder set locals
counter set locals-1
udiv16_8:
pushl 0 ; remainder
pushl 16 ; counter
udiv_0:
rlcf [dividentL]
rlcf [dividentH]
udiv_1:
rlcf [remainder]
bc udiv_3
movf [divider], W
subwf [remainder], W
bnc udiv_neg
movwf [remainder]
bra udiv_neg
udiv_3:
movf [divider], W
subwf [remainder]
bsf STATUS, C
udiv_neg:
rlcf [dividentL]
rlcf [dividentH]
udiv_4:
decfsz [counter]
bra udiv_1
movss [remainder],[divider]
_ret_unlnk locals
_ret_unlnk - это макрос на расширенную команду "addulnk"