Newsgroup: it.comp.os.linux.development
Titolo: assembler in gcc

Ciao, come si fa ad includere codice assembler nel GNU C (gcc) ?
So che in Visual C++ e' sufficiente scrivere:
    _asm{
        .....
        .....
    }
ma in GNU C non funziona, non e' che sia possibile inserire direttamente le
istruzioni assembler avendo incluso un qualche header? se si quale header?
Grazie mille della eventuale risposta :-)

    }
la direttiva analoga in gcc e' 
__asm__ ("... 
          ... 
          ... ");
e si limita a inserire il tuo codice nel punto
esatto dove lo hai scritto nell'assembler che 
viene passato a as. In altri termini un vero 
e proprio inserimento "raw".
 
CiaoCiao
LordFelix
------------ disLESSici cr3w member -------------
char I[24]="_beWYX_\\k3W\\f_Xff\\V\\!beZ";main(){
int i=(((3*23))-69);for(;i<24;i++)I[i]=(i<27)?(I[
i]+13):(I[i]&(((53%20-i+27))));printf("%s\n",I);}

 e proprio inserimento "raw".
Direi invece che e` piuttosto cooked: per esempio, gli operandi delle
istruzioni assembler possono essere espressioni C.
Ciao
 David
-- 
<d.santinoli presso mi . flashnet . it>

[zak]
si, ma l'assembler č quello AT&T, non quello borland/microsoft!
Attenzione e leggi assembler-HOWTO o games-faq di gcc

istruzioni assembler avendo incluso un qualche header? se si quale header?
devi scrivere:
asm("....");
per maggiori info leggi 'Assembly-HOWTO'

istruzioni assembler possono essere espressioni C.
sisi, intendevo raw, nel senso che viene messo tutto cio'
che scrivi nel assembler che produce il compilatore nel
punto esatto dove metti la direttiva __asm__ ... addirittura
puoi piazzare qualche commento, sempre che sia nella sintassi
di as :))
Puoi rendertene conto compilando un qualsiasi prog con 
-S ... e' chiaro che puoi usare tutti i simboli che sono 
definiti nel codice assembler ottenuto. 


Attenzione e leggi assembler-HOWTO o games-faq di gcc
A tal proposito ti consiglio NASM come assemblatore

 e proprio inserimento "raw".
E per scrivere una funzione in asm ?  Come vengono passati i parametri ?
Bye.

 definiti nel codice assembler ottenuto.
A proposito... e' possibile migliorare l'aspetto del file .s generato ? 
esempio:
a=10;
diventa:
	li 0,10
	stw 0,8(31)
mi ha tolto "r" davanti al nome dei registri :-((  Dovrebbe essere:
	li r0,10
	stw r0,8(r31)
che e' come lo visualizza ddd ed e' chiaramente piu' leggibile, sopratutto
nelle istruzioni a 4 o 5 operandi...
Bye.

E per scrivere una funzione in asm ?  Come vengono passati i parametri ?
E` spiegato tutto nei dettagli nel manuale di gcc.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it


ti consiglio di usare il nasm (netwide assembler)
che oltre ad avere una sintassi molto piu leggibile del as per gcc
e anche portabile tra linux, dos, win32 e diversi unix in generale,
l'assmbler per gcc rispetta lo0 standard AT&T che è tremendamente illegibile,
inoltre l'assemblatore del gcc non fa praticamente nessun controllo
degli errori, a tutti questi problemi la risposta è nasm.

Bye.
il C a un modo di passare iu parametri standard, mi pare che vengano
inseriti nello stack dal primo all'ultimo, ma non ne sono assolutamente 
sicuro, e piu di un anno che non tocco lassembler, il gcc
segue questo standard.

 segue questo standard.
Mettiamola cosi': non so neppure quale sia il puntatore allo stack, non so
quali sono i registri scratch, non so un pincopallino di niente... dove posso
trovare della doc ?
Bye.

trovare della doc ?
Prova con info gcc nella sezione (credo) Extended Asm.
Magari vedendo i sorgenti del kernel per avere del codice funzionante.

trovare della doc ?
E` *tutto* spiegato nel manuale di gcc.
Tra parentesi, non hai bisogno di sapere queste cose.


trovare della doc ?
Cerca roba tipo "assembler tutorial" in rete per le basi. Poi cerca un
documento chiamato gcc-inline-asm per la parte specifica all'assembler
inline nel gcc. Altra roba con info gcc (sezione constraints) che in questo
caso IMVHO è fatta da schifo. 
www.delorie.com
 per la roba fatta con DJGPP
che ha la stessa identica sintassi del gcc. A mali estremi ho appena
terminato un programma di conversione spazi colore che usa istruzioni
floating point in assembler inline per gcc. Se sei messo veramente male puoi
darci un'occhiata. Te lo mando volentieri.
Precisazione: quel prog di conversione l'ho fatto per un'esame
all'università non per piacere personale :-)) Se non ve lo dico mi prendete
per un pazzo furioso ! :-))))
-- 
		Giuseppe Corbelli
    -=< A Metal Heart Is Hard To Tear Apart >=-
ANTI-SPAM: E-Mail address is fake. Substitute cowo with IHATESPAM.