Full Version : ASM Jump Table Sample
avr >>ASSMBLER ROUTINES >>ASM Jump Table Sample


AVR_Admin- 04-26-2006
A Sample Jump Table in AVR Assembler

CODE


   
.def   Zero   = r15
.def   Offset = r16
.def   tmp1   = r17
     
   
Start:

  ldi   tmp1,Byte1(RAMEND)  ; Stack setup
  out   SPL,tmp1
  ldi   tmp1,Byte2(RAMEND)
  out   SPH,tmp1
  clr   Zero        ; Ct. register
  ldi   Offset,-1  ; Jump_Offset register
   
Next:
   inc   Offset        ; Jump_Offset = (0...9)
   cpi   Offset,10
   brne   PC+2
   ldi   Offset,0
   
   ldi   ZL,Byte1(Jmp_Table)  ; Z points to the Jmp_Table
   ldi   ZH,Byte2(Jmp_Table)
   mov   tmp1,Offset    ; tmp1 = Offset
;   lsl   tmp1  ; Comment if Jmp_Table has RJMPs
              ; Uncomment for JMPs
   
  add   ZL,tmp1        ; Z += Offset
   adc   ZH,Zero
   
 ; ijmp method (before using it, comment the ret method)
  ijmp
   
  ret
       
.org   0x100   Jmp_Table:
Jump0:   rjmp   Next        ; ... or anywhere else.
Jump1:   rjmp   Next        ;  same as above
Jump2:   rjmp   Next
Jump3:   rjmp   Next
Jump4:   rjmp   Next
Jump5:   rjmp   Next
Jump6:   rjmp   Next
Jump7:   rjmp   Next
Jump8:   rjmp   Next
Jump9:   rjmp   Next



Forumer™ is Voted #1 Free Forum Hosting provider
Build your own community today with the largest message board hosting company.