【发布时间】:2013-02-19 13:05:02
【问题描述】:
我的任务是更改位位置
开始第 7 位 |位6 |位5 |位4 |位3 |位2 |位1 |位0
最终位3' |位2' |位7 |位6 |位1 |位0 |位5' |位4'
使用按位和移位/滚动指令。
我不知道如何以不同于移动和滚动的方式移动它们。我应该只使用一个还是多个寄存器来做到这一点?
【问题讨论】:
-
那是什么处理器?如何做到这一点很大程度上取决于可用的指令。在programming.sirrida.de/calcperm.php 填写此内容建议将这些位移动到四组,每组两个,这是有道理的,我自己也会这样做。
-
ldi r16, $F0 ; 将值 F0 赋予 r16。然后我使用了“lsl”、“lsr”等命令。
-
该方法非常简单。取一个 2 位块,将其移动到正确的位置。通过 AND 将所有其他位清零。然后 OR 与先前处理的块的块。这样做 4 次。是的,您需要几个寄存器——一个用于处理当前块,另一个用于累积结果,另一个用于源。我不知道你的系统组装,但这是一般的方法。
-
如何取2bit chunk?我需要 4 个寄存器吗?
-
不是爱特梅尔,伙计们。从概念上讲是的,但这会产生异常缓慢的代码。这是一个 8 位微控制器,只有 1 位移位/滚动。
标签: assembly bit-manipulation avr atmega