Про ссылки
funс(Type &a){
__asm{
mov eax,a.p//здесь передается не то что надо, а какая-то чушь
}
}
Создается впечатление, что вместо "a" передается "&a" - в смысле адрес.
Здесь Type - класс. По ходу появился еще один вопрос. А если Type это структура - пройдет или нет???
...
void DoSomeThing(int &i)
{
...
i = 2+2; //а не *i = 2+2
...
}
Ну а структуры ты там передаешь, или классы - это все равно.
funс(Type &a){
int *vspom=a.p
__asm{
//mov eax,a.p//здесь передается не то что надо, а
mov eax,vspom//все работает
}
}
?????????????
А почему тогда не работает приведенный пример - там в регистр пишется не значение переменной а непонятно что?, причем если сделать спец. переменную, то все проходит:
funс(Type &a){
int *vspom=a.p
__asm{
//mov eax,a.p//здесь передается не то что надо, а
mov eax,vspom//все работает
}
}
__asm{
mov ebx, [a.p];//компил. берет адрес переменной-ссылки (видимо таки глюк)
mov eax, [ebx];//получаем знач. по адресу
add eax,10; // изменяем
mov [ebx],eax; //заносим обратно
}
Symbols, including labels and variable and function names
Constants, including symbolic constants and enum members
Macros and preprocessor directives
Comments (both /* */ and // )
Type names (wherever a MASM type would be legal)
typedef names, generally used with operators such as PTR and TYPE or to specify structure or union members
Я вообще когда на ASM-е работал (еще под DOS), то компилил на ASM-е *.obj, а потом подключал к проекту и объявлял extern "C" функции.
интерпретация нипричем... если вы развернете EXE-шник дизасмом, то увидите, что сылка передается как все тот же указатель на переменную, но через стек. Если ваш код работает с такой ссылкой - компилятор сам решает, как работать с ней, а ассемблерная вставка - не знает - ей нужно подсказать, что это адрес. См. пример выше
То есть просто глюк компилера, да?
И скажите вот еще что. Нужно сделать работу с 32 битными регистрами для Borland C++ 3. Можно ли будет сделать так же: скомпилить *.obj например в Visual C++, а потом включить в проект Борланда; а как тогда быть с объявлениями класса??
Цитата:
Originally posted by molnij
Просто использование точки проходит - проверял.
То есть просто глюк компилера, да?
И скажите вот еще что. Нужно сделать работу с 32 битными регистрами для Borland C++ 3. Можно ли будет сделать так же: скомпилить *.obj например в Visual C++, а потом включить в проект Борланда; а как тогда быть с объявлениями класса??
Просто использование точки проходит - проверял.
То есть просто глюк компилера, да?
И скажите вот еще что. Нужно сделать работу с 32 битными регистрами для Borland C++ 3. Можно ли будет сделать так же: скомпилить *.obj например в Visual C++, а потом включить в проект Борланда; а как тогда быть с объявлениями класса??
Да я уж лет шесть на ASM-е не работал. Как там с классами - не знаю, не использовал, а функции писал: объявляешь процедуру и вытаскиваещь данные из стека, а в С объявляешь функцию как extern "C". Извини, подробнее не могу - позабыл уже, а старые свои записи где искать и не знаю. Поищи в Инете.