Newsgroup: it.comp.lang.c++
Titolo: COMUNICAZIONE FRA ASSEMBLY E C

Ho l'esigenza di scrivere pezzi di codice asm in un programma C... non
capisco però come posso fare per far "comunicare" il codice C con il codice
Asm. Cerco di spiegarmi meglio. IL mio problema è quello di far scambiare
dati fra le due parti.
Supponiamo che il pezzo di codice asm esegua una elaborazione e dia come
risultato un dato di uscita. Ora come faccio a trasferire questo dato di
uscita in una variabile definita nel programma C?
Io avevo pensato di porre il risultato in una locazione di memoria e poi
andarla a leggere con l'uso di un puntatore... ma in quale locazione di
memoria la metto? Come faccio a riferirmi alla stessa locazione sia dall'
assembly che dal C? Praticamente non conosco la "rappresentazione" della
memoria del C e dell' Asm. Poi è assoluta o è relativa? Se è relativa, l'
indirizzo iniziale (con cui poi calcolo l' assoluto) è lo stesso per il C e
l' asm? Ho qualche concetto sui registri segmento dell'8086 ma non credo che
le cose funzionino più così...
Scusate se le domande non sono chiare o sono troppe...
Se il metodo di scambio non è quello che ho pensato io ditemi qual' è quello
corretto per piacere.
Grazie.

Nessuno sa niente???

 dati fra le due parti.
Quello che vuoi fare dipende strettamente dal compilatore.
L'unica cosa che lo Standard C++ prevede è l'uso della
keyword asm per scrivere codice assembler "in linea".
Tutto il resto è implementation-defined.
Devi consultare i file della guida al compilatore che usi.
Manlio Perillo

dati fra le due parti.
Non esiste uno standard; il come fare dipende dal sistema di
sviluppo. Alcuni compilatori ti semplificano la vista permettendo
di mettere nel sorgente C++ delle parti in assembler; anche
questo pero' viene fatto in modo diverso a seconda del compilatore
che utilizzi. Dovresti provare a chiedere aiuto in un newsgroup
specifico del tuo ambiente di sviluppo.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Se il metodo di scambio non č quello che ho pensato io ditemi qual' č


 che utilizzi.
Veramente lo Standard per il C++ prevede asm.
L'uso è : asm( string-literal );
Il suo significato è implementation-defined, ma il suo intento
è quello di fare in modo che la stringa sia codice assembler che
verrà inserito nel codice generato nel posto specificato.
Manlio Perillo

 Nessuno sa niente???
qualcosa so, ma se non dici che compilatore usi, farei molta fatica ad
aiutarti. E poi non so se è IT, non credo, al massimo domandami in
privato.

 che le cose funzionino più così...
Ho l'impressione che ti "manchino" le basi. Oltretutto ripeto non c'e' un 
metodostandarda, le cose cambiana da O.S. ad O.S. se non addirittura da 
compilatore a compilatore. Se fossi in te cercherei qualche esempio in 
giro...
Oppure proverei a guardare l'asm generato da un compilatore ( meglio se in 
esecuzione attraverso un debugger )

verrà inserito nel codice generato nel posto specificato.
Se il significato e' implementation-defined significa che e'
implementation-defined. Punto. Per sapere cosa fa bisogna fare
riferimento al singolo compilatore.... non e' detto che un
compilatore C++ necessariamente debba permettere di inserire
istruzioni assembler nel codice o se lo permette debba farlo
necessariamente tramite "asm( string-literal )".
Andrea
PS: Non lo sapevo ;)



Veramente l'intento di asm( string-literal ) è proprio
quello di fornire una interfaccia comune per quello
che poi è completamente implementation defined.
P.S.
Comunque personalmente preferisco la sintassi adottata
dalla Borland:
asm
{
    assembler-expression-list
}
asm assembrer-expression
Manlio Perillo