вставки на ASN'е

Все о программировании под *nix
mp3

вставки на ASN'е

Сообщение mp3 »


Нужно в сишную программу сделать вставку на ASM'е
Пытаюсь сделать так:

Somefunction(){
....
asm
{
movl %eax,%ebx
}
...
}
В итоге parse error
Что делать???

AlekseyKondratenko

Сообщение AlekseyKondratenko »

See info gcc.

Also look at headers in /usr/include/asm/ or /usr/src/linux/include/asm/

mp3

Сообщение mp3 »

Посмотрел ... бр
вот для примера
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
do { \
int dummy; \
asm("1: movl (%1),%%eax;" \
"movl %%eax,%%edx;" \
"andl %2,%%edx;" \
"btsl $0x1,%%edx;" \
"adcl $0x0,%%edx;" \
"lock; cmpxchgl %%edx,(%1);" \
"jnz 1b;" \
"cmpb $0x3,%%dl;" \
"sbbl %%eax,%%eax" \
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \
} while(0)

%1 , %2 очевидно параметры a ,c ; но как полностью расшифровать строчку
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx");

^ ^ ^ почему в одном случае есть = а в другом нет.

PS Есть ли какая-нибудь дока типа PORTING HOW-TO?


:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:

AlekseyKondratenko

Сообщение AlekseyKondratenko »

There was something like assemply howto.

Also look at gcc info page at section gcc extensions.

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

Почти, только =а и =с это не параметры, а вид, в котором хранятся/записываются переменные. На эту тему не могу посоветовать ничего лучше как почитать маны или лучше инфы по инлайн-ассмеблеру в gcc. Здесь описывать всё это тоже не буду - долго занудно и кроме того у меня нет педагогического таланта:D
%-символ, который надо писать перед именами регистров. Но в инлайне нужен двойной % перед регистрами (%%еах). $ - префикс для "непосредственной" переменной ($0x3 - нечто иное как 0х3, а не указатель на память с адресом 0х3, например)
Н/с портирования ИМХО следует хорошо изучить доки по инлайну и всё будет ОК
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

Код: Выделить всё

asm (“shrl $8, %0” : “=r” (answer) : “r” (operand) : “cc”);
The keyword asm is followed by a parenthetic expression consisting of sections separated
by colons.The first section contains an assembler instruction and its operands. In
this example, shrl right-shifts the bits in its first operand. Its first operand is represented
by %0. Its second operand is the immediate constant $8.
The second section specifies the outputs.The instruction’s one output will be
placed in the C variable answer, which must be an lvalue.The string “=r” contains an
equals sign indicating an output operand and an r indicating that answer is stored in a
register.
The third section specifies the inputs.The C variable operand specifies the value to
shift.The string “r” indicates that it is stored in a register but omits an equals sign
because it is an input operand, not an output operand.
The fourth section indicates that the instruction changes the value in the condition
code cc register.
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

Для output'a могут быть такие флаги:

R General register (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP)
q General register for data (EAX, EBX, ECX, EDX)
f Floating-point register
t Top floating-point register
u Second-from-top floating-point register
a EAX register
b EBX register
c ECX register
d EDX register
x SSE register (Streaming SIMD Extension register)
y MMX multimedia registers
A An 8-byte value formed from EAX and EDX
D Destination pointer for string operations (EDI)
S Source pointer for string operations (ESI)

За более подробными разъяснениями - info
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

Аватара пользователя
Scorpion
Интересующийся
Сообщения: 54
Зарегистрирован: 25 фев 2004, 21:56
Контактная информация:

Сообщение Scorpion »

А проще никак нельзя!

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

Scorpion, что именно?
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

Гость

Сообщение Гость »

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

Ответить