;inv.asm				--- Inverte um vetor de bytes terminado pelo valor bonário 0
;************************************************************************************
.nolist
.include "m88def.inc"
.list
.def	r	=r16
.equ    RAMST =0x100
start:
	rjmp	RESET	

RESET:
	ldi	r,low(RAMEND)
	out	SPL,r		 	;inicializa Stack Pointer	
    ldi	r,high(RAMEND)
	out	SPH,r		 	;inicializa Stack Pointer		
	ldi yh, high(RAMST)		; inicio da RAM  vai receber cópia do vetor
	ldi yl, low(RAMST)
	ldi zh, high(tab*2)		; vetor na area de programa
	ldi zl, low(tab*2)
	mov xl,yl			; salva ponteiro para inicio do vetor,
	mov xh,yh			; para usarmos na fase de troca dos bytes

loop:					; laço para  transferir vetor da area de programa para RAM						
	lpm				    ; r0 <= [z]			
	adiw zh:zl,1			; z aponta para proximo byte
	or r0,r0			; testa o valor lido,
	breq l1				; fim do vetor  se valor = 0
	st y+, r0			; armazena byte na SRAM e atualiza o ponteiro y
	rjmp loop

l1:					; laço para inverter o vetor
					; coloque o seu código aqui
					;

done:
        rjmp PC				; fim, entra num laço infinito; equivale a rmp done					

tab:	.db "ABCDEFGHIJ",0		; vetor de dados na área de programa!
	


