URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4023
[ Назад ]

Исходное сообщение
"Взаимодействие с ассемблерными вставками"

Отправлено MaximZaikin , 03-Мрт-05 16:15 
У меня вопрос такой. Например в функцию написанную на С мы встовляем ассемблерную вставку, которая допустим включает мотор дисковода. Вопрос как считать слово st0 и передать его на обработку функции в C ?

Содержание

Сообщения в этом обсуждении
"Взаимодействие с ассемблерными вставками"
Отправлено dimus , 04-Мрт-05 12:21 
Сделай отдельную функцию на ассемблере, и просто вызывай ее из программы на С. Не используй встроенный ассемблер.

"Взаимодействие с ассемблерными вставками"
Отправлено MaximZaikin , 04-Мрт-05 16:01 
>Сделай отдельную функцию на ассемблере, и просто вызывай ее из программы на
>С. Не используй встроенный ассемблер.

А как это можно сделать ?



"Взаимодействие с ассемблерными вставками"
Отправлено Soldier , 05-Мрт-05 12:30 
>>Сделай отдельную функцию на ассемблере, и просто вызывай ее из программы на
>>С. Не используй встроенный ассемблер.
>
>А как это можно сделать ?

Линукс, gcc-2.95.4, NASM 0.98.28
1) Файл getst.asm
//=====================
extern _save_st0

global getst0
getst0:
FST QWORD [_save_st0]
ret
//================

Компилировать
nasm -f elf -o getst getst.asm

2) Файл 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  всегда пустым будет


"Взаимодействие с ассемблерными вставками"
Отправлено dimus , 05-Мрт-05 14:41 
Так тоже можно, но я име в виду написать на асме вообще всю функцию. Встроенный ассемблер же желательно не использовать вообще из соображений понятности кода и легкости дальнейшего портирования на другие архитектуры.