【问题标题】:How to shift 111 starting with 00000001 Assembler如何从 00000001 汇编程序开始移位 111
【发布时间】:2015-02-08 13:23:49
【问题描述】:

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

我不知道如何在没有硬编码的情况下在循环中执行此操作,也许擅长汇编的人可以建议如何优雅地执行这种转换。
提前谢谢

【问题讨论】:

  • 这看起来像是用公式捕捉的噩梦。解决方案:查找表。

标签: assembly byte bit avr shift


【解决方案1】:

看起来像一个微不足道的 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

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2016-06-02
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多