inline assembly not allowed in inline and template functions
От: gnan  
Дата: 08.12.09 09:30
Оценка:
день добрый)
пишу на Си
требуется вставить асемблеровский код
в этом не силен


class MyClass{
    MyClass(){
        asm mov dx,0x0FF80;  ///// ОШИБКО !!! /////

    };
    ~MyClass(){};
};

при этом возникает ошибка:
inline assembly not allowed in inline and template functions

подскажите как решить проблему? ибо с подобным ниразу не сталкивался близко (Си и asm)

в идеале хотелось бы следующее:
class MyClass{
    MyClass(int a, int b){
        asm mov dx,0x0FF80;  ///// ОШИБКО !!! /////

    };
    ~MyClass(){};
};

и параметры int a, int b использовать в asm-операциях
Re: inline assembly not allowed in inline and template funct
От: Bell Россия  
Дата: 08.12.09 09:36
Оценка:
Здравствуйте, gnan, Вы писали:

...

Ну для начала попробуй сделать конструкто не-inline — вынеси его определение из тела класса в cpp-файл.
Любите книгу — источник знаний (с) М.Горький
Re[2]: inline assembly not allowed in inline and template fu
От: gnan  
Дата: 08.12.09 09:44
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, gnan, Вы писали:


B>...


B>Ну для начала попробуй сделать конструкто не-inline — вынеси его определение из тела класса в cpp-файл.



void MyASMCode(){
    asm mov dx,0x0FF80
        //...
};
class MyClass{
    MyClass(){
        MyASMCode();
    };
    ~MyClass(){};
};

так пашед
а другого варианта я так понимаю нет?


а как реализовать подобное?
void MyASMCode(int a, int b){
    asm mov dx,a //int a
        asm mov dl,b //int b
        //...
};
class MyClass{
    MyClass(int a, int b){
        MyASMCode(int a, int b);
    };
    ~MyClass(){};
};
Re: inline assembly not allowed in inline and template funct
От: Pavel Dvorkin Россия  
Дата: 08.12.09 09:54
Оценка:
Здравствуйте, gnan, Вы писали:

G>при этом возникает ошибка:

G>inline assembly not allowed in inline and template functions

Что за компилятор ?


class MyClass{
    MyClass(int a, int b){
        __asm mov dx,0x0FF80;  ///// ОШИБКО !!! /////

    };
    ~MyClass(){};
};

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}


========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

VC2008

А теперь вопрос — зачем этот mov вообще ? Да еще с 16-битным регистром ?


G>в идеале хотелось бы следующее:

G>и параметры int a, int b использовать в asm-операциях


class MyClass{
public :
    MyClass(int a, int b){
        __asm {
            mov eax,a;
            mov edx, this
            mov [edx],eax; // это может быть совсем неверно !!!
            mov ebx, b;
            mov [edx+ 4],ebx; // и это тоже может быть совсем неверно !!!
        }

    };
    ~MyClass(){};
    int m_a, m_b;
};

int _tmain(int argc, _TCHAR* argv[])
{
    MyClass m(3,8);
    return 0;
}
With best regards
Pavel Dvorkin
Re[2]: inline assembly not allowed in inline and template fu
От: gnan  
Дата: 08.12.09 10:06
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, gnan, Вы писали:


G>>при этом возникает ошибка:

G>>inline assembly not allowed in inline and template functions

PD>Что за компилятор ?


bc 3.1


void MyASMCode(int a, char b){
    asm mov dx,a
    asm mov dl,b
};

class MyClass
{
    MyClass(int a, char b){
        MyASMCode(a, b);
    }
    ~MyClass(){};
};


отл
вот так работает
внимание на функцию void MyASMCode(int a, char b):
dx(2 байта) состоит из dl и dh (по 1 байту)
соответственно и выполнять операции нужно с учетом этого char(1 байт), int(2 байта)
void MyASMCode(int a, char b){
    asm mov dx,a  // верно 
    asm mov dl,b  // верно
    asm mov dx,b  // не верно
    asm mov dl,a  // не верно
};

вотъ
Re[2]: inline assembly not allowed in inline and template fu
От: gnan  
Дата: 08.12.09 10:08
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, gnan, Вы писали:


B>...


B>Ну для начала попробуй сделать конструкто не-inline — вынеси его определение из тела класса в cpp-файл.


а все таки есть вариант, чтобы функция void MyASMCode() была внутри класса MyClass ??
а то какая то фигня получается с точки зрения ООП =)
Re[3]: inline assembly not allowed in inline and template fu
От: Pavel Dvorkin Россия  
Дата: 08.12.09 10:12
Оценка:
Здравствуйте, gnan, Вы писали:

PD>>Что за компилятор ?


G>bc 3.1


Э, батенька, так с этого и надо было начинать. Кто же мог подумать, что ты для MS-DOS пишешь...


G>внимание на функцию void MyASMCode(int a, char b):

G>dx(2 байта) состоит из dl и dh (по 1 байту)
G>соответственно и выполнять операции нужно с учетом этого char(1 байт), int(2 байта)

Несомненно

G>[ccode]

G>void MyASMCode(int a, char b){
G> asm mov dx,a // верно
G> asm mov dl,b // верно
G> asm mov dx,b // не верно

Еще бы

G> asm mov dl,a // не верно


То же самое.
With best regards
Pavel Dvorkin
Re[3]: inline assembly not allowed in inline and template fu
От: Pavel Dvorkin Россия  
Дата: 08.12.09 10:12
Оценка: +1
Здравствуйте, gnan, Вы писали:

G>а все таки есть вариант, чтобы функция void MyASMCode() была внутри класса MyClass ??


Не писать для BC 3.1
With best regards
Pavel Dvorkin
Re[4]: inline assembly not allowed in inline and template fu
От: gnan  
Дата: 08.12.09 10:17
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Э, батенька, так с этого и надо было начинать. Кто же мог подумать, что ты для MS-DOS пишешь...


да не со зла я
не моя воля под дос писать)))

G>>внимание на функцию void MyASMCode(int a, char b):

G>>dx(2 байта) состоит из dl и dh (по 1 байту)
G>>соответственно и выполнять операции нужно с учетом этого char(1 байт), int(2 байта)

PD>Несомненно


G>>[ccode]

G>>void MyASMCode(int a, char b){
G>> asm mov dx,a // верно
G>> asm mov dl,b // верно
G>> asm mov dx,b // не верно

PD>Еще бы


G>> asm mov dl,a // не верно


PD>То же самое.



ну эт я так, для последующих поколений
а то задолбался на форумах натыкаться на "все заработало, ничего не нада" и все, никаких решений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.