Newsgroup: it.hobby.elettronica.digitale
Titolo: richiamo funzioni scritte in c da assembly

Salve a tutti.
Ho imparato che e' possibile includere delle linee scritte in assembly
in un programma c.
Volevo sapere se era possibile il contrario.
Sto rimettendo mano ad un sorgente scritto in assembly per delle
modifiche.
Volevo sapere se era possibile, dal sorgente in assembly, richiamare
delle funzioni scritte in C.
In pratica devo trovare il sistema di creare un file .obj dal
compilatore C.
Una volta creati i file oggetto dal sorgente assembly e i file oggetto
dal sorgente C, fonderli insieme in un unico file hex.
Sono convintissimo che e' possibile, ma non so come si fa.
Inoltre non so come si comporterebbe la funzione C richiamata
dall'assembly: come restituirebbe i valori? come passare i parametri?
la routine in C si puo' richiamare per indirizzo?
Intatto mi sto studiando come funziona il linker.
Spero di non aver fatto una domanda troppo stupida.
Saluti
IW0HKG

 Volevo sapere se era possibile il contrario.
Scusa, rispondo a quello che ho capito, anche se mi sa' che 
ho capito male, non volermene, mi sembra troppo facile, ma 
se metti una riga
#__asm
...il programma assembler
#__endasm
dovresti aver risolto e poter provare a fare la compilazione 
con il compilatore C.
Poi, se vuoi fare un porting, allora, e solo allora, 
cominciano i casini.
ciao
Angelo


 Poi, se vuoi fare un porting, allora, e solo allora, cominciano i casini.
Mi sembra che stia chiedendo esattamente l'opposto,
ovvero vorrebbe fare una sorta di
..programma in asm
#__C
...routine in c
#__endC
programma in asm
Cosa ovviamente non possible senza conoscere approfonditamente la struttura 
del file .obj e, cosa ancora più importante, se il file stesso contiene 
effettivamente funzioni standalone (molti linguaggi che utilizzo, anche per 
la stessa piattaforma, generano files .obj differenti/incompatibili fra di 
loro).
Se Massimo dispone di un compilatore c e vuale effettivamente utilizzare 
funzioni ad altro livello che non vuole riscrivere in  asm, potrebbe provare 
ad adattare tutto il programma attuale all'interno di due direttive 
#asm...#endasm ed inserire il codice in c, lasciando poi al compilatore il 
compito di adattare il tutto.
Per fornire maggiori info, occorrerebbe sapere almeno la piattaforma hw ed i 
tools utilizzati.
Roberto P. 

 Roberto P.

 Volevo sapere se era possibile il contrario.
Ci sono anche modi più piacevoli per masturbarsi, senza coinvolgere terzi.


Non apprezzi la perversione della forma con cui mi sono espresso o
ritieni che quello che voglio fare sia inutile? :-)
Secondo me puo' tornare utile a piu' di qualcuno poter richiamare
delle funzioni scritte in un "comodo e contorto C" da un sorgente
assembly.
E' comodo soprattutto se ormai hai scritto migliaia di righe di codice
assembly come nel mio caso.
Ne approfitto anche per ringraziare tutti per le risposte.
Cerco di studiare una soluzione in base a quanto mi avete detto e se
ci riesco vi faccio sapere (se vi interessa).
Saluti
IW0HKG Massimo

 assembly.
Il punto fondamentale č il "typing" delle variabili. In assembler,
fondamentalmente, non c'č, quindi č a dir poco azzardato pensare di
innestare funzioni che manipolano dati fortemente tipizzati in una
struttura che non lo č.

 Roberto P.

 struttura che non lo è.
Qualunque cosa scritta in C viene "tradotta" in Assembler. Che poi non è 
vero che il Typing delle varibili non esiste in Assembler. Il Assembler 
non esiste il concetto di varibile ma essite il concetto di accesso alla 
memoria, e questo, di fatto è una varibile.
Che poi queste non siano tipizate esplicitamente è tutto un discorso di 
forma. Se uno sa scrivere codice assembler ( se uno scrive un main in 
asm si suppogna che lo sappia fare ) non credo che abbia difficolta ad 
accendere alla memoria a un dato indirizzo assegato ad una costante 
memonica ( il nome della varibile ).
Dal C si ponno chiamare codice Asm in due modi, il modo inline e 
linkando direttamente codice oggetto generato dal compilatore assembler.
Dal Assembler si possono richiamare funzioni C basta che queste siano 
compilate in un oggetto poi linkato con il codice oggetto provenite dal 
codice ASM.
Esistono programmi assembler, scritti in assembler intendo dire, che 
richiamano perfino le API di windows, e se tu non lo sapessi le API di 
windows sono scritte in C... che poi l'utilità di scrivere oggigiorno un 
programma in assembler che crei una finista sia tendente a zero siamo 
daccordo ma lui ha chiesto un altra cosa, è possibile farlo?
Si è possibile farlo. Il tutto sta nel come. Bisogna avere un compilatre 
C che generi un codice oggetto ( di soltio si fa con l'opzione -c ) poi 
bisonga compilare il codice assemlber e poi mischiare tutto con il 
linker. Il problema sono i nomi. I compilatori C spesso aggiungono 
qualcosa davanti al nome come ad esempio i parametri di ingresso per 
favori l'overloading o semplicemente puo' aggiungere uno o due _ ( 
underscore ) non mi stupirei troppo se il simbolo da usare nel codice 
assembler della funzione
int pippo ( int, int )
fosse qualcosa del genere:
CALL _Z5provaii
dove le due i stanno per int, se fosse stato
int pippo ( int, char )
allora avremmo avuto
CALL _Z5provaic
se avvessimo anche un passaggio di un array diventerrebbe
CALL _Z5provaiPc
... di soltio tutte queste convenzioni come è già stato detto sono ben 
scritte nei manuali. Di solito è meglio comunque usare programmi della 
stessa casa almeno si è sicuri del formato oggetto usato.
Poi possiamo discutere sull'inutilita del tutto e sono daccordo pero' è 
possibile farlo.
-- 
Il Razziatore,
"Lo sviluppo di una nazione si misura anche dallo stato della sua rete 
ferroviaria". Camillo Benso Conte di Cavour
"Per tutto quanto non previsto nel presente regolamento il capostazione 
deve usare senno e ponderatezza." Regolamento d'esercizio FS
-----------------------------------------------
MSN   : 
IlRazz...@netscape.net
ICQ   : 67552596
Yhaoo : Razziatore82
-----------------------------------------------
Founder of MediaPlayer Project
http://razziatore.no-ip.com/mpp/

 Poi possiamo discutere sull'inutilita del tutto
Sei tu a farlo. Io l'ho stigmatizzata due post fa.
Non te la prendere se sono secco, non ce l'ho certo con te o con nessun
altro. Ogni tanto mi pento di perder tempo sui NG, ogni tanto ne ho degli
aiuti illuminanti. Ora c'ho da lavorare e non dovrei esser qui.

 aiuti illuminanti. Ora c'ho da lavorare e non dovrei esser qui.
Scusate, se mi intrometto e sono anche io 'secco'.
Se qualcuno, chiunque esso sia, posta un quesito su un NG e chiede aiuto, o 
gli si risponde rimanendo in topic, oppure, specialmente se :
- si ha da lavorare
- si ha altro da fare
- non sia ha voglia di rispondere,
- non si hanno le risposte da fornire
- ...
semplicemente non si risponde, evitando inutili polemiche o flames ed 
evitando di manifestare arie di superiorità estrema che non portano alla 
soluzione di nulla.
Qui non si devono dimostrare le proprie conoscenze/competenze a nessuno,non 
vi è nessun obbligo tranne quelli citati nel manifesto del ng.
Non 'nasciamo tutti imparati', chiunque ha il diritto di porre i propri 
quesiti,sta poi nella bontà/affabilità/competenza/.... degli altri 
partecipanti,rispondere, ma sempre rimanendo in topic.
Almeno questo è ciò che penso io...
Chiudo qui, visto che per questo mio post, sono anche io abbondantemente OT.
Roberto P. 

 Roberto P.
Hai semplicemente notato che da quando sono arrivati i coglionazzi,
tutti i messaggi si trasformano in spazzatura, basta non rispondere
alle sue cazzate.

 Roberto P.

 Scusate, se mi intrometto e sono anche io 'secco'.
In pratica spendi quattro volte più tempo a farmi la morale che a
rispondere al topic col risultato di aizzare uno che non ha mai contribuito
nulla se non flame ed un talebano dei PIC.
Rileggiti i tuoi sbrodoloni sull'inizializzazione della memoria e dimmi se
sono stati più utili del mio intervento. Almeno non ho sostenuto cose
false, io, e sono stato più succinto.


[...]
Ci rinuncio,
sarà l'età (la mia) oppuere evidentemente sei ad un livello talmente 
superiore al mio che non riesco a capirti.
Ognuno porta la sua esperienza e la sua competenza e cerca di metterla a 
favore di altri,
semplicemente io cerco di fare questo, non escludo poi che altri possano 
avere soluzioni migliori o che io a volte 'scazzi' clamorosamente (sono un 
umano,io, ed in quanto tale...).
C'è invece chi pensa di essere già al top,e si limita solo a riprendere gli 
altri o a ribadire strenuamente con decine di messaggi, le proprie 
convinzioni senza portare, alla fine, nessun aiuto concreto a chi lo 
richiede.
Tutto qui.
Ciao, ;-)
Roberto P. 

 Tutto qui.
Se hai capito con chi hai a che fare perche' gli dedichi tempo? un 
personaggio che da del Talebano a chi non la pensa come lui, che dal del 
Talebano a chi usa i PIC (chi usa gli AVR sara' un Americano?) che da del 
Talebano a Simone Bern che anche se non mi e' simpatico sicuramente non e' 
uno stupido.
Lascia perdere tanto e' questione di tempo, gia' persone che sono da qui da 
molto piu' tempo di lui,  non hanno replicato proprio per evitare 
discussioni inutili.
Con questo messaggio concludo e non replichero' piu' al personaggio in 
questione. 

assembly come nel mio caso.
Premetto che proprio non mi piace quello che vuoi fare, che senso ha usare 
linguaggi a basso livello come l'assembler, per aggiungere parti di 
programma in C che e' un linguaggio ad alto livello?
Se proprio vuoi fare questa cosa puoi scrivere con il tuo editor o meglio 
sotto IDE di MPLAB il tuo bel programma in assembler facendo:
#__asm
...il programma assembler
#__endasm
a questo punto metti quello che vuoi in C, poi sara' il compliatore che nel 
tuo caso e' il C18 a creare il file hex da caricare nel Pic Talebano :-)

Comunque non avete ancora capito chi sia il bertolazzi:
http://www.collettivamente.com/articolo/566758.html
oppure fate una bella ricerca su google mettendo f.bertolazzi capirete
cosi' che meglio non rispondere alle sue provocazioni.

 programma in C che e' un linguaggio ad alto livello
Obbella. E questa chi te l'ha raccontata?

 Obbella. E questa chi te l'ha raccontata?
http://it.wikipedia.org/wiki/Linguaggio_di_programmazione_ad_alto_livello
 

topgun:

C'è una frase, ovvero:
Proprio in virtù di questa evoluzione storica, spesso un linguaggio
definito "ad alto livello" alla sua nascita in seguito "diventa di basso
livello"; un esempio fra tutti è quello del C
che, a parte contraddire te, che, mi dirai, non hai bisogno di essere
contraddetto visto che spari solo cazzate, contraddice anche ciò che ne
diceva Ritchie (Dennis, non Lionel).

 diceva Ritchie (Dennis, non Lionel).
 Un linguaggio di programmazione viene definito di alto livello tanto più si 
avvicina alla terminologia umana, inversamente si dice che un linguaggio è 
di basso livello se il suo codice si avvicina al linguaggio macchina (quello 
formato da 0 ed 1); tipico esempio di linguaggio a basso livello è 
l'Assembler, mentre linguaggi ad alto livello sono, oltre al C, il C++, il 
Java e molti altri. La particolarità dei linguaggi ad alto livello è quella 
di avere una semplice sintassi in cui si usano parole della lingua inglese 
per descrivere comandi corrispondenti a decine di istruzioni in assembler o 
centinaia di istruzioni in linguaggio macchina. 

 avvicina alla terminologia umana,
Da chi viene definito? Dagli ignoranti par tuo? Sai cosa si intende per
"terminologia"? No, è evidente. Hai una bella fantasia, ma non sei
abbastanza intelligente per inventarti qualcosa di verosimile
Smettila di polemizzare su cose di cui non hai la più vaga idea, non fai
altro che arricchire la tua collezione di figure da cioccolataio.

 abbastanza intelligente per inventarti qualcosa di verosimile
Asino, il messaggio originale al quale ti sei attaccato per far polemica 
tanto per non smentire che sei un autentico coglionazzi era:
Premetto che proprio non mi piace quello che vuoi fare, che senso ha usare
linguaggi a basso livello come l'assembler, per aggiungere parti di
programma in C che e' un linguaggio ad alto livello?
Tu da coglionazzo quale sei ha quotato per far polemica:
 programma in C che e' un linguaggio ad alto livello
Ora anche gli asini sanno che fra i due linguaggi Assembler e C , 
l'assembler e' a basso livello, il C e' alto livello.
Ma mi sa che per gli asini si perde tempo sapone ed acqua.

Spero di non aver fatto una domanda troppo stupida.
Non è stupida, tutt'altro, però è una bella pesca e devi considerare se ne vale
davvero la pena.
--
ciao
  Stefano

 delle funzioni scritte in C.
Si è possibile...
-- 
Bad day: You wake up dead. 
News 2002 [v 2.08] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

 Si è possibile...
Tanto per gradire:
http://courses.ece.uiuc.edu/ece390/books/labmanual/c-prog-mixing.html
-- 
Programmers do it bit by bit.
