1

Тема: VC++ inline assembler, як додати 2 floata використовуючи FPU?

Хай. Ото завдання було, розібратись з тим, як перевести float в 80-розрядне бінарне, а потім зробити щось з float'ами використовуючи Float Point Unit.
Ну, з просто ассемблеру я знаю, що два числа мона додати от так

int integer = 4;
    __asm {
        mov eax, integer
        add eax,2
        mov integer,eax
    }

    cout << integer;

І це дуже-дуже просто.
А як таке саме зробити, але вже з float'ом?
Написав от так

float fl = 4.0f;
    __asm {
        fild fl   // тіпо запихуємо fl до отого стеку, чи як його там
        fadd fl, st(0) // а тот тіпо додаємо st(0) до fl і результат заносимо в fl
    }

Але мене спіткала помилка

error C2415: improper operand type

І вона вказує на строку

fadd fl, st(0)

Що робити, аби було файно?

2

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

Що робити, аби було файно?

Занести і другий операнд в стек сопроцесора

3

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

0xDADA11C7 написав:

Що робити, аби було файно?

Занести і другий операнд в стек сопроцесора

я так і думав, зара спробуємо

4

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

щось не те

float fl = 4.0f;
    __asm {
            fild fl
            fild fl
            fadd st(0), st(1)
            fst fl
    }

    cout << fl;

http://не-дійсний-домен/cTh8X/6c8f74e2bf.png

5 Востаннє редагувалося 0xDADA11C7 (16.11.2014 19:05:42)

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

оберіть які команди вам потрібні - fld/fadd/fst чи fild/fiadd/fist
http://www2.math.uni-wuppertal.de/~fpf/ … ode_f.html

6

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

0xDADA11C7 написав:

оберіть які команди вам потрібні - fld/fadd/fst чи fild/fiadd/fist
http://www2.math.uni-wuppertal.de/~fpf/ … ode_f.html

кхм, я так пойняв, fld - для float, а fild - для integer, ага?

7

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

так

Подякували: FakiNyan1

8 Востаннє редагувалося FakiNyan (16.11.2014 19:12:03)

Re: VC++ inline assembler, як додати 2 floata використовуючи FPU?

фак є маза фака біч сак май дік ма ніга єєє
http://не-дійсний-домен/cThSw/db5032be01.png
p.s. то я не до вас, а взагалі