При использовании расширенной системы команд - компилятор будет
очень тривиальным
Добавляется стек данных через индексный регистр 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"