2010-07-09 20 views
2

我有一个512字节长的数据的二进制块,我想知道如果我想将它转移一次,最有效的方法是什么。我现在最好的猜测是(现在对程序集来说很新),我将不得不首先检查一个块(可能是int),看看它会移出什么,移位,然后进入前一个int会发生什么变化然后继续执行这个数据下移。有更容易的方法吗?如果我必须使用这种携带技术,我可以移动的最大块是什么?双字?四字?8086装配中的大二进制位移?

回答

2

如果您只想移位一次,请使用旋转进位指令。

首先,确保进位标志为零。然后:

  1. 拉4个字节到寄存器
  2. RCR
  3. 下一个4个字节
1

即使对于大型内存结构,在x86下移动也非常简单。

1)设置或清除进位标志取决于你不会作为结果的第一位(LSB)。

2)没有必要拉数据寄存器你可以一次过像内存直接换档32位:

rcr  dword ptr[edx], 1 

甚至更​​好

rcr  dword ptr[edx + ecx *4], 1 

其中ECX是一个循环计数器和edx一个内存指针。

2)储存最后移进位

编辑: 在内存,你可以在一次32位转移,不要忘记对内存aligment,移位32位双字aligend提高执行速度。