2013-02-19 72 views
1

给定2个数字,x和n,将x乘以2^n的方法是什么? 例如x = 3.7和n = 5。所以3.7 * 2^5 = 118.4。 我需要这样做,而不使用FPU命令(数学协处理器)。如何在装配中乘以2^n?

所以我认为32位bt处理器中的数字用32位表示:第1位是符号,后8位(2-9)是指数,后面23位称为SIGNIFICAND。

指数字段是2^k中的k。所以我需要做的只是改变指数字段并将n添加到它。 exponent = exponent + n

那么我如何在程序集8086中做到这一点?

谢谢

+1

你有没有发现什么晦涩的处理器?没有集成x87 FPU的最后一个x86 CPU是486SX IIRC。 – MSalters 2013-02-19 11:54:01

回答

3

这里有一些相当丑陋的内联asm,VS风格。希望你会得到的想法:

float mul(float f, int p) 
{ 
    __asm { 
     mov eax, f 
     mov ecx, p 
     shl ecx, 23 
     add eax, ecx 
     mov f, eax 
    } 

    return f; 
} 

这显然并没有检查溢出等