Re[9]: Вызвать библиотечную функцию (fscanf) со "своим" стек
От: SergH Россия  
Дата: 10.12.03 23:59
Оценка:
Здравствуйте, TaniaDen, Вы писали:

TD>Вобщем, так работает..




TD> // длину области памяти и её адрес нужно хранить в регистрах,

TD> // иначе f2 их испортит. Только не в eax, он испльзуется для
TD> // возвращения результата. ecx и edx тоже портятся.. Вообще,
TD> // во всех (пяти) просмотренных прологах функций почему-то
TD> // сохраняются только ebp, ebx, esi и edi. Это что ли
TD> // соглашение такое? Никому нельзя верить..

Судя по этому вот

When using __asm to write assembly language in C/C++ functions, you don't need to preserve the EAX, EBX, ECX, EDX, ESI, or EDI registers. For example, in the POWER2.C example in Writing Functions with Inline Assembly, the power2 function doesn't preserve the value in the EAX register. However, using these registers will affect code quality because the register allocator cannot use them to store values across __asm blocks. In addition, by using EBX, ESI or EDI in inline assembly code, you force the compiler to save and restore those registers in the function prologue and epilogue.


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_core_Using_and_Preserving_Registers_in_Inline_Assembly.asp

да, похоже соглашение для VC. Ещё я нашёл одно упоминание, что Microsoft C сохраняет bp, di и si, но там имелся ввиду DOS..
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.