;macro1.asm
			; Exemplo de macro para multiplicar dois numeros de 8 bits sem sinal passados
			; em dois registradores (parametros @0 e @1)  e colocar o produto de 16 bits na RAM
			; no endereço apontado por um dos pares X, Y ou Z (parametro @2);
			; mais eficiente e versatil do que a subrotina mult8.asm pois quaisquer registradores
			; podem ser usados assim como qualquer par para apontar para o resultado
			; MC404 3 Abril 2008  -- Prof Célio
;**********************************************************************************************************************************************
.nolist
.include "m88def.inc"
.list
.def    r	=r16		; usado na inicialização dos apontadores da pilha e iinicio da RAM
start:
	rjmp	RESET		; salta sobre eventuais vetores de interrupção
	; se tivermos rotinas de interrupção os vetores (saltos para as rotinas) estariam aqui
	; vetor 1
    	; etc
;********************************************************************************
.macro mult8; macro para multiplica dois números de 8 bits sem sinal
			; Parâmetros de entrada: 
			; @0 e @1: dois registradores quaisquer (números para multiplcar)
			; @2 um dos pares X,Y ou Z: endereço na RAM para colocar o produto no formato little endian
			; destroi: r0, r1, @2

	mul @0,@1
	st @2+,r0
	st @2, r1
.endmacro
;*******************************************************************************
RESET:					; início do programa
	ldi	r,low(RAMEND)	;fim da RAM: definido em m88def.inc
	out	SPL,r			;inicializa Stack Pointer		
	ldi	r,high(RAMEND)
	out	SPH, r
	ldi yh, high(SRAM_START)	; Area de RAM onde será colocado o resultado
	ldi yl, low(SRAM_START)
	ldi r16,2
	ldi r17,5
	mult8	r16,r17, y	; reultado no formato little endian (low, high): 0a00 
	ldi r20,2			; vamos fazer outro teste, multiplicando r20 com r21
	ldi r21,129
	movw x,y			; vamos usar x como ponteiro,
	adiw x,1			; x agora aponta para SRAM_START +2
	mult8	r20,r21,x   ; produto = 258 = 0x0102  (0201 no formato little endian)     
	rjmp PC			;laço infinito

