;t.asm   inicializa um vetor a partir do fim com inteiros decrescentes
;notação: constantes estão definidads com EQU (maiusculo) 
;         endereços de variáveis estão definidos com equ (minusculo)
            
	list      p= 16F877           ;  p=16F84 list directive to define processor
FSR		EQU   0x04                ; reg apontador
INDF	EQU   0x00		          ; reg (ficticio) indireto
w		EQU    0
f		EQU	1
tabsize EQU 10h			  ; tamanho do vetor = 16

count equ 1ch			  ; contador
tab equ 20h				  ; endereço inicial do vetor

	ORG 0x000

	movlw tab+tabsize-1  ; o montador aceita expressões desse tipo
	movwf FSR            ; FSR recebe endereço do final do vetor
	movlw tabsize		 ; tamanho do vetor => W
	movwf count			 ; tamanho do vetor => count
loop:
    movf count,w         ; redundante só na 1a iteração
    movwf INDF           ; atualiza entrada corrente do vetor              
	decf FSR,f           ; aponta para próxima entrada           
    decfsz count,f       ; decrementa contador, se zero salta prox instução
  ; decfsz count,w ; (count) -1 => W, oops!! count fica inalterado!     
    b loop               ; senão volta ao laço
	sleep
 END                  

