首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

64位移位的有关问题

2012-04-21 
64位移位的问题?我在写一个把double转换为int的汇编代码,如下double real 123.456__int64 a 0__asm{

64位移位的问题?

我在写一个把double转换为int的汇编代码,如下

double real = 123.456;
__int64 a = 0;

__asm
{
  //取指数
  mov eax,dword ptr[real+4]
  and eax,0x7ff00000
  shr eax,20
  sub eax,1023 // 现在eax存储着指数的位数
  
  // 由于double的符号位为1,指数位为11,尾数为52,如果要把小点部分干掉,
  // 那么需要移位的总数为
  mov ecx,52
  sub ecx,eax //位移量不可能超过255,所以位移量位于cl

  // 现在取得尾数部分
  mov edx,dword ptr[real+4]
  mov eax,dword ptr[real]
  and edx,0x000fffff // 把指数部分干掉
  or edx,0x00100000 // 恢复尾数部分的最高位
   
  // 现在EDX,EAX存储的就是real的尾数部分
  // 这一步我不知道怎么解决????????????
  // 伪代码是 shr (EDX-EAX),cl
  // 因为不可能使用64位寄存器,所以把它们分别放在EDX和EAX
  // 我查看了VC的反汇编,它调用一个过程: call __allshr,不过这个过程我们不能使用
}

也就是说,把一个64位的数,其高位放在EDX,底位放在EAX,然后如何进行移位呢?????
 

[解决办法]
shrd eax,edx,cl
shr edx,cl

热点排行