;mult.asm
			; exemplo de subrotina: mult8 multiplica dois numeros de 8 bits sem sinal
			; e coloca o produto (de 16 bits) na RAM no formato little endian
			; mc 404 aBRIL 2008
;**********************************************************************************************************************************************
.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
;********************************************************************************
mult8:
; subrotina para multiplica dois números de 8 bits sem sinal
      ; Parâmetros de entrada: 
	 ; r16 e r17 : números para multiplcar
	 ; par Y: endereço na RAM para colocar o resultado no formato little endian
      ; destroi: r0, r1, Y
;*******************************************************************************
	mul r16,r17
	st y+,r0
	st y, r1
	ret
;*******************************************************************************
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
	rcall mult8		; reultado no formato little endian (low, high): 0a00 
	rjmp PC			;laço infinito
