ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
1092305 Топик полностью
Zikon (12.04.2021 08:29, просмотров: 436) ответил my504 на Работа с одноаккумуляторной архитектурой - это вопрос привычки. В ней есть свои фичи. При правильном подходе код будет достаточно плотным.
Да, это интересно - особенно с расширенной системой команд 

Если зафиксировать банк 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