当前位置: 代码迷 >> 汇编语言 >> 多双字节移位不是太懂!帮帮忙啊高手们、该怎么处理
  详细解决方案

多双字节移位不是太懂!帮帮忙啊高手们、该怎么处理

热度:8673   发布时间:2013-02-26 00:00:00.0
多双字节移位不是太懂!????????帮帮忙啊,高手们、!!!
7.3.1 多双字移位
  程序有时需要移动数组内的所有位,如将位映射图像从屏幕的一个位置移动到另一个位置就需要这样做,以一个包含三个双字的数组为例,通过下面的步骤可以将数组整体向右移动一位:
  1、将ESI设置为array的偏移。
  2、将[esi+8]位置处的双字向右移一位,最低位拷贝到进位标志中。
  3、将[esi+4]处的值右移一位,最高位以进位标志的值填充,最低位拷贝到进位标志中。
  4、将[esi+0]处的双字右移一位,其最高位以进位标志值填充,其最低位拷贝到进位标志中。
  下图显示了数组的内容及间接引用:
  |99999999h|99999999h|99999999h|
  [esi] [esi+4] [esi+8]
  实现程序Multishf.asm的代码如下:
  .data
  arraysize=3
  array DWORD arraysize DUP(99999999h) ;1001 1001 ...
  .code
  mov esi,0
  shr array[esi+8],1
  rcr array[esi+4],1
  rcr array[esi],1
   
问题:
我看不懂这样怎么可能把它们同时右移动一个位,我感觉错了,我想的是
1、第一次shr 99999999h, 最后一个位进入进位标志。

2、第二次rcr 99999999h,最低位进入进位标志,最高位用[esi+8]的最低位填充的。

3、第三次rcr 99999999h 高位用[esi+4]的最低位,最低位进入进位标志。
这样就不是同时移动所有位@
那位高手给我讲讲行不@
   

 

------解决方案--------------------------------------------------------
的确,当初我看到这节内容也是很奇怪,不过自己做下实验就知道了,我认为书上所说的有错误,应该是:

Assembly code
    mov esi,0    shr Array[esi],1        rcr Array[esi+4],1        rcr Array[esi+8],1
  相关解决方案