2013-02-19 3 views
1

Учитывая 2 числа, x и n, каков метод умножения x на 2^n? Например x = 3,7 и n = 5. поэтому 3.7 * 2^5 = 118.4. Мне нужно это сделать, не используя команды FPU (математический сопроцессор).Как умножить на 2^n в сборке?

Итак, я понял, что числа в процессоре 32 бит представлены 32 битами: первый для знака, следующий 8 (2-9) для экспоненты, а следующие 23 называются SIGNIFICAND.

Поле экспоненты представляет собой k в 2^k. Поэтому мне нужно только изменить поле экспоненты и добавить n к нему. exponent = exponent + n.

Как я могу это сделать в сборке 8086?

Спасибо

+1

Что неясное процессором вы нашли? Последним процессором x86 без встроенного x87 FPU был 486SX IIRC. – MSalters

ответ

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; 
} 

Это, очевидно, не имеешь никакой проверки на переполнение, и т.д.

 Смежные вопросы

  • Нет связанных вопросов^_^