当前位置: 代码迷 >> 汇编语言 >> 怎么将字节内的位颠倒次序
  详细解决方案

怎么将字节内的位颠倒次序

热度:1495   发布时间:2013-02-26 00:00:00.0
如何将字节内的位颠倒次序?
已知一个字节长的数据:B7   B6   B5   ...   B1   B0,想将其颠倒为B0   B1   ...   B5   B6   B7。
请问有没有比较简便的方法?谢谢各位高手的参与!!!

------解决方案--------------------------------------------------------
比较简便的方法???

其实你的这个问题等效于
“将字节型数据中的第7位和第0位交换,第6位和第1位交换,第5位和第2位交换,第4位和第3位交换”!!
------解决方案--------------------------------------------------------
循环移位,如颠倒AL
mov cl,8
rol al,cl
------解决方案--------------------------------------------------------
不好说啊
------解决方案--------------------------------------------------------
光循环移位还不行。

调用前数据在AL中,调用后翻转的字节在AL中。

ByteReverse Proc
mov dl,al
mov cx,8
_Reverse:
ror dl,1
mov al,dl
shl ax,1
loop _Reverse
mov al,ah
ByteReverse endp

------解决方案--------------------------------------------------------
光循环移位还不行。

调用前数据在AL中,调用后翻转的字节在AL中。

ByteReverse Proc
mov dl,al
mov cx,8
_Reverse:
ror dl,1
mov al,dl
shl ax,1
loop _Reverse
mov al,ah
ByteReverse endp
-----------------------------
为何要 shl ax,1?
------解决方案--------------------------------------------------------
最佳答案:

假设要将BL中的内容颠倒位序:

XOR BH,BH ;将BH清零,并清除进位标志

MOV CX,8
L1:RCL BL,1 ;从BL的位7到位0依次取出
RCR BH,1 ;以bit为单位,将从BL中取出的二进制位依次压入BH
LOOP L1

MOV BL,BH ;保存倒序后的结果

------解决方案--------------------------------------------------------
mengshijie_1981()的方法确实更加简便!!
  相关解决方案