 
http://we.easyelectronics.ru/AVR/kolcevoy-bufer.html

    ,   .
 :      ,     ,  ,  255 .     RBSIZE,        .      ,       .     ,    ;     .      ,    .        .
      PutToBuf     r16,  GetFromBuf  .         ,     r16  .
 xl,xh,r17, /   29 .    ,           .


;   :
;.equ RBSIZE=11
; ringbuf:      .byte RBSIZE+3
;   : 
;+0 -  
;+1 -  
;+2 -  
;+3... - 
;  : xh,xl,r16,r17
;   . 29 
PutToBuf:       ldi     xh,high(ringbuf+3) ;  
                ldi     xl,low (ringbuf+3)
                lds     r17,ringbuf+0   ;load rbdept
                cpi     r17,RBSIZE        ;   
                brcc    pc+16
                inc     r17
                sts     ringbuf+0,r17    ;store rbdept
                lds     r17,ringbuf+1   ;load rbputptr
                add     xl,r17            ;    
                brcc    pc+2
                inc     xh
                st      x,r16            ;    
                inc     r17               ;   
                cpi     r17,RBSIZE        ; ,   
                brcs    PC+2
                clr     r17
                sts     ringbuf+1,r17   ;store rbputptr
                ret

;   . 29 
GetFromBuf:     ldi     xh,high(ringbuf+3)
                ldi     xl,low (ringbuf+3)
                lds     r17,ringbuf+0   ;load rbdept
                tst     r17            ;   
                breq    pc+16
                dec     r17
                sts     ringbuf+0,r17   ;store rbdept
                lds     r17,ringbuf+2   ;rbgetptr
                add     xl,r17
                brcc    pc+2
                inc     xh
                inc     r17
                cpi     r17,RBSIZE
                brcs    PC+2
                clr     r17
                sts     ringbuf+2,r17   ;rbgetptr
                ld      r16,x
                ret