У меня вопрос такой. Например в функцию написанную на С мы встовляем ассемблерную вставку, которая допустим включает мотор дисковода. Вопрос как считать слово st0 и передать его на обработку функции в C ?
Сделай отдельную функцию на ассемблере, и просто вызывай ее из программы на С. Не используй встроенный ассемблер.
>Сделай отдельную функцию на ассемблере, и просто вызывай ее из программы на
>С. Не используй встроенный ассемблер.А как это можно сделать ?
>>Сделай отдельную функцию на ассемблере, и просто вызывай ее из программы на
>>С. Не используй встроенный ассемблер.
>
>А как это можно сделать ?Линукс, gcc-2.95.4, NASM 0.98.28
1) Файл getst.asm
//=====================
extern _save_st0global getst0
getst0:
FST QWORD [_save_st0]
ret
//================Компилировать
nasm -f elf -o getst getst.asm2) Файл st.c
//=====================
double _save_st0=0;extern void getst0();
main() {
printf("1. Before calling getst0. _save_st0=%f\n",_save_st0);
getst0();
printf("1. After calling getst0. _save_st0=%f\n",_save_st0);
}
//====================
Компилировать
gcc -o st st.c getst.oТолько там везде fstp (сохранить с очисткой стека) используется и st0 всегда пустым будет
Так тоже можно, но я име в виду написать на асме вообще всю функцию. Встроенный ассемблер же желательно не использовать вообще из соображений понятности кода и легкости дальнейшего портирования на другие архитектуры.