代码之家  ›  专栏  ›  技术社区  ›  Corey Ogburn

8086汇编中的大二进制移位?

  •  2
  • Corey Ogburn  · 技术社区  · 16 年前

    我有一个512字节长的二进制数据块,我想知道如果我想把它右移一次,最有效的方法是什么。

    我现在最好的猜测是(对于汇编来说是非常新的)我必须首先检查一个块(可能是int)来查看它将移出什么,移位,然后执行先前int将移出的任何内容,并继续执行这个移位。有没有更简单的方法?如果我必须使用这种进位技术,我能移动的最大块是什么?德沃德?Q字?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Anon.    16 年前

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

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

    1. 将4个字节放入寄存器
    2. 写回
    3. 在接下来的4个字节中重复
        2
  •  1
  •   GJ.    16 年前

    即使对于大内存结构,在x86下进行转换也非常简单。

    rcr     dword ptr[edx], 1
    

    或者更好

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

    其中ecx是循环计数器,edx是内存指针。

    2) 存储最后移位的进位