Да, это интересно - особенно с расширенной системой команд Если зафиксировать банк 0 в регистре банка - то получаем 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