我有一个512字节长的二进制数据块,我想知道如果我想将它一次移到右边,最有效的方法是什么。
我现在最好的猜测(非常新的装配)将是我必须首先检查一个块(可能是int)以查看它会移出什么,移位,然后继续进行以前的int会移出的并继续进行数据转换。有没有更简单的方法?如果我必须使用这种携带技术,那么我可以移动的最大块是什么?双字? QWORD?
答案 0 :(得分:2)
如果您只想换一次,请使用旋转随身携带说明。
首先,确保进位标志为零。然后:
答案 1 :(得分:1)
即使对于大型内存结构,在x86下移位也非常简单。
1)设置或清除进位标志取决于你不会作为结果的第一位(LSB)。
2)无需在寄存器中提取数据,您可以在内存中直接移位32位,如:
rcr dword ptr[edx], 1
甚至更好
rcr dword ptr[edx + ecx *4], 1
其中ecx是循环计数器,edx是内存指针。
2)存储最后移位的进位位
编辑: 在内存中你可以立即移动32位并且不要忘记内存对齐,移动32位aligend dwords来提高执行速度。
答案 2 :(得分:0)
x86处理器有一个Carry标志,可以很好地实现此目的。随着Carry标志scr
和scl
有移位说明。 http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate#Shift_With_Carry_Instructions