Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
No non ti conviene, in genere si usa per fare ottimizzazioni ma non farlo se non è proprio necessario, ecco tre motivazioni:
1) Rendi il codice osceno;
2) Avrai problemi per i vari compilatori se supportano l'at&t o l'intel, per esempio gcc usa gas come assembler, che usa la sintassi at&t, mentre quello di vs usa l'intel;
3) Rendendi il codice dipendente dalla piattaforma;
Finché non sei obbligato evita
1) Non è un problema
2) I compilatori che mi interessano sono gcc e mingw
3) Beh se devo solo fare mov e add non penso...
Fai come vuoi dopotutto ognuno è libero di fare ciò che vuole, io il mio parere l'ho dato. E poi cosa pensi di migliorare usando mov e add in assembly? Vorrei proprio vedere cosa pensi di aver ottimizzato, mi farei volentieri due risate stasera
No non ti conviene, in genere si usa per fare ottimizzazioni ma non farlo se non è proprio necessario, ecco tre motivazioni:
1) Rendi il codice osceno;
2) Avrai problemi per i vari compilatori se supportano l'at&t o l'intel, per esempio gcc usa gas come assembler, che usa la sintassi at&t, mentre quello di vs usa l'intel;
3) Rendendi il codice dipendente dalla piattaforma;
Finché non sei obbligato evita
1) Non è un problema
2) I compilatori che mi interessano sono gcc e mingw
3) Beh se devo solo fare mov e add non penso...
Fai come vuoi dopotutto ognuno è libero di fare ciò che vuole, io il mio parere l'ho dato. E poi cosa pensi di migliorare usando mov e add in assembly? Vorrei proprio vedere cosa pensi di aver ottimizzato, mi farei volentieri due risate stasera
Era solo per fare un esempio, comunque l'ho specificato nel primo post: "anche solo per curiosità", non devo mica venderla sta libreria XD
se vuoi imparare l'assembly, scrivi un sorgente intero in tale linguaggio. Poi linkalo ad un programma C e richiama le sue funzioni rispettando il linkage C STDCALL.
Se usi l'inline asm fai solo porcate, viola praticamente TUTTI i paradigmi della buona programmazione in un colpo solo (incapsulamento, astrazione, portabilità, leggibilità, manutenibilità, modularità, ecc...).
se vuoi imparare l'assembly, scrivi un sorgente intero in tale linguaggio. Poi linkalo ad un programma C e richiama le sue funzioni rispettando il linkage C STDCALL.
Se usi l'inline asm fai solo porcate, viola praticamente TUTTI i paradigmi della buona programmazione in un colpo solo (incapsulamento, astrazione, portabilità, leggibilità, manutenibilità, modularità, ecc...).
http://www.ingmonti.it/libri/Parte2/16%20ASM%20C.pdf.
Pag 7 "Collegamento al C di procedure scritte in Assembly", intendevi questo?
Grazie comunque del consiglio ora vedo come posso fare.
Avevo scelto l'assembly inline per non dover scrivere tutte le procedure per intero ma solo qualche pezzo. Comunque una volta ottenuto il file ".asm" o ".s" poi vedo quale usare devo creare l'oggetto da linkare al momento della compilazione?
si, in realtà creare un file separato è più facile :-)
Poi ti basta inserire una regola nel makefile (impara ad usare i makefiles!) che ti genera i file oggetto usando come riga di comando il tuo assembler preferito (io usavo NASM) e una volta compilati, i file oggetto saranno identici a quelli fatti in C, quindi potrai linkarli usando il normale linker.
si, in realtà creare un file separato è più facile :-)
Poi ti basta inserire una regola nel makefile (impara ad usare i makefiles!) che ti genera i file oggetto usando come riga di comando il tuo assembler preferito (io usavo NASM) e una volta compilati, i file oggetto saranno identici a quelli fatti in C, quindi potrai linkarli usando il normale linker.
Ok penso di aver capito..
Quindi (tralasciando temporaneamente i makefiles):
main.c
extern "C"
{
int Somma(int a, int b);
}
int main()
{
int var1=10;
int var2=10;
int somma=Somma(var1,var2);
...
}
somma.asm
Somma proc
...
Somma endp
Compilo somma.asm, linko l'oggetto al compilatore c, compilo main.cpp e dovrei aver tutto?
Solo come le riconosce l'assembler i parametri C? (per questo forse dovrei studiare direttamente il linguaggio...)
Ultima modifica effettuata da comina8 il 13/08/2011 alle 15:56
Il passaggio dei parametri è descritto dalla cosiddetta ABI del sistema.
L'ABI cambia da un OS all'altro, da un'architettura all'altra, da un compilatore all'altro, insomma studia
In linea di massima i parametri vengono pushati nello stack in ordine da destra verso sinistra (così la funzione in ASM fa "pop" e si ritrova il primo parametro pronto), e il registro eax viene generalmente usato per il valore di ritorno.