如何从 00000001 开始移位 111 汇编器

How to shift 111 starting with 00000001 Assembler

我需要循环移位寄存器的值。我需要从 00000001 -> 00000011 -> 00000111 -> 00001110 -> 00011100 -> 00111000 -> 01110000 -> 11100000 -> 01110000 -> 00111000-> 00011100-> 00001110-> 00000111 -> 00000011 -> 00000001 .

开始

我不知道如何在没有硬编码的情况下在循环中执行此操作,也许精通汇编程序的人可以建议如何优雅地执行此类移位。
提前致谢

看起来像一个微不足道的16位旋转,唯一复杂的是它需要在两端反转方向。这是我快速整理的内容:

    rcall init
loop:
    rcall next
    rjmp loop
init:
    ldi r16, 1    ; output
    ldi r17, 0xc0 ; buffer
    ldi r18, 0    ; direction
    ret
next:
    cpi r18, 0
    brne right
left:
    cpi r16, 0xe0
    breq right    ; go right if at the end
    ldi r18, 0    ; direction is left
    lsl r17       ; 16 bit rotate left
    rol r16
    ret
right:
    cpi r16, 1
    breq left
    ldi r18, 1    ; direction is right
    lsr r16       ; 16 bit rotate right
    ror r17
    ret