68000-如何将寄存器中的十六进制数字向左移动2个单位?

时间:2014-11-15 23:27:43

标签: 68000

我想将数字01,02,03,04单独移动到寄存器D1中,以便在完成所有移动后,寄存器D1中的结果将为01020304.

我想解决这个问题的方法是,将01移到D1。然后以某种方式将它向左移动2位数然后移动02.依此类推以获得解决方案。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这可以通过多种方式完成,最合乎逻辑的是先加载预期的最高字节,然后左移寄存器(8位= 1字节)并加载下一个字节:

 move.b #$01,d0
 lsl.w #8,d0      ; could lsl.l here, too
 move.b #$02,d0
 lsl.l #8,d0
 move.b #$03,d0
 lsl.l #8,d0
 move.b #$04,d0
 ; d0 = $01020304

稍微有点混乱,但是(在68000上)更快的方法是将上面描述的最重要的字加载到低位字,然后使用SWAP指令切换寄存器一半,然后正常加载最低有效字:

 move.b #$01,d0
 lsl.w #8,d0
 move.b #$02,d0
 swap d0
 move.b #$03,d0
 lsl.w #8,d0
 move.b #$04,d0
 ; d0 = $01020304

这里的要点是SWAP在整个寄存器上执行16的旋转,因此可以使用字大小的移位执行单独的旋转。此外,由于68000没有桶形移位器,因此移位性能取决于移位距离,这意味着将寄存器移位8相对较慢,而SWAP执行速度很快。

在"更大的" 68K会员您不会看到很多性能差异,因为无论换班距离如何,他们都会快速转换。