|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2010
Messaggi: 162
|
[assembly&c]chiamate di funzioni
ragazzi volevo sapere se è possibile chiamare una funzione scritta in C da una porzione di codice scritta in linguaggio assembly. è possibile fare il contrario?cioè chiamare una funzione assembly da un codice scritto in c. magari con motivazione....grazie
__________________
Acer 5920g: T7500 GeForce 8600GT 2GB DDR2 250HDD |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Certo che è possibile.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2010
Messaggi: 16
|
Codice:
.global funzione
funzione:
...codice asm...
Codice:
extern void funzione();
void boh()
{
funzione();
}
Ultima modifica di morgoth90 : 23-05-2010 alle 13:00. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Se usi visual studio puoi usare facilmente l'assembly inline usando
Codice:
__asm {
...CODICE ASSEMBLY - SINTASSI INTEL...
}
Ad ogni modo fai una ricerca su google tipo "inline assembly" NOME_COMPILATORE e trovi tutto. Ricordati che, per ragioni di portabilità (specialmente nell'ottica dei 64bit) usare l'assembly dovrebbe essere fatto solo in caso di emergenza. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
però a differenza del C devi preparare lo stack ( mettere nello stack i parametri da passare alla funzione e riservare lo spazio per i dati ritornati dalla funzione ), poi fai semplicemente CALL nome-funzione la parte relativa allo stack è quella che riguarda le cosidette convenzioni di chiamata che dipendono dal linguaggio e/o dal compilatore usato fai una ricerca per le key "cdecl" "stdcall" "fastcall" p.s. riguardo il contrario è ovviamente possibile, però il discorso cambia e cioè è la funzione a dover tener conto delle convenzioni di chiamata e quindi sapere come il compilatore C ha messo i parametri nello stack e dov'è localizzata l'area che conterrà i dati di ritorno in sostanza il punto in entrambi i casi è che in assembly non hai il runtime che si occupa di leggere/scrivere i parametri sullo stack ma devi farlo manualmente Ultima modifica di pabloski : 23-05-2010 alle 15:23. |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jan 2010
Messaggi: 162
|
se dentro un sorgente C voglio mettere del codice assembly, ho capito che posso usare il procedimento inline assembly. ma se volessi fare il contrario, il procedimento prende un nome specifico?
poi...dentro assembly è possibile mettere istruzioni del C perchè il compilatore riuscirà a tradurre tranquillamente quelle istruzioni di C in linguaggio assembly?
__________________
Acer 5920g: T7500 GeForce 8600GT 2GB DDR2 250HDD |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
se crei un programma tutto in assembly e lo compili tramite un assembler non puoi metterci codice C l'unico modo per metterci codice C è di scrivere in programma in C, mettere l'assembly tramite inlining e farlo compilare dal compilatore C |
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Jan 2010
Messaggi: 162
|
Quote:
in un codice C si può richiamare una funzione scritta in assembly?sì in un codice assembly si può richiamare una funzione scritta in C?no
__________________
Acer 5920g: T7500 GeForce 8600GT 2GB DDR2 250HDD |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
quando parliamo di richiamare una funzione C da un programma assembly possiamo benissimo riferirci ad un programma assembly che richiama una funzione C ma presente in una libreria esterna se invece intendi incorporare una funzione C in un file .asm allora non è possibile perchè l'assembler non è in grado di tradurre il C, mentre qualsiasi compilatore C è capace di tradurre l'assembly |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Si può fare in entrambi i casi.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
da come l'ho capita io, lui si riferisce alla possibilità di embedding del codice C in un listato assembly
o meglio, forse confuso dal fatto che in C si può embeddare codice assembly ha logicamente pensato che valesse pure il viceversa |
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Jan 2010
Messaggi: 162
|
Quote:
__________________
Acer 5920g: T7500 GeForce 8600GT 2GB DDR2 250HDD |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:44.





















