asm ("fldl% 0" ...) в DOS, синтаксис Intel? - PullRequest
0 голосов
/ 18 февраля 2019

Я работаю над ретро-проектом, пытающимся скомпилировать тестовый код в Borland Turbo C ++ / DosBox.

У меня есть эта функция:

double sin(double x){
   asm ("fldl %0;"
        "fsin;"
        "fstpl %0" : "+m"(x));
   return x;
}

Я полагаю, что это возвращает грехзначение x, но в противном случае я потерян.

Ошибка: неопределенный символ 'fldl'

Может кто-нибудь объяснить эту функцию в синтаксисе Intel asm?

Я могуне понимаю, я только когда-либо кодировал 16-битный асм-код DOS и без плавающей запятой.

С уважением / Джейкоб

1 Ответ

0 голосов
/ 19 февраля 2019

Проблема в том, что целевой ЦП должен быть не менее 386.

, поэтому функция должна быть:

double sin(double x){
    asm{
        fld qword ptr [x]
        fsin
        fstp qword ptr [x]
    }
    return x;
}

Я получил подобный код для компиляции в TASM с .386после .MODEL "размер"

...