Newsgroup: it.comp.lang.c++
Titolo: Inserire codice in assembly in un programma C++

Per motivi didattici devo creare una funzione in assembly che prende i
parametri in ingresso da registri e scrive quelli in uscita su altri
registri.
Pensavo di inserire chiamare questa procedura all'interno di un
programma in C++.
1)Come faccio a chiamare una funzione assembly da un prog in c++
(compilandolo assieme al rispettivo .o generato in assembly)?
2)Come faccio a includere codice scritto in assembly su in c++ mi sembra
ci sia la direttiva __asm{} ma non funziona!!
P.S. Lavoro sotto linux utilizzando i classici compilatori GNU
post P.S. Se qualcuno ha qualche notizia si faccia vivo, ho passato un
pomeriggio a cercare nelle varie FAQ e manuali, ma niente!
 
---------------------------
     Andrea Scarsetto
 
scarse...@tin.it
 
scars...@arena.sci.univr.it
--------------------------
rimuovere XXX

 ci sia la direttiva __asm{} ma non funziona!!
ehm.... ma non era semplicemente asm{}?
--
Ertai, Wizard Adept
~-~-~-~-~-~-~-~-~-~-~-~-~-~-
|||  Out of my own, out to be free  |||
~-~-~-~-~-~-~-~-~-~-~-~-~-~-

P.S. Lavoro sotto linux utilizzando i classici compilatori GNU
Ecco il problema!!
Mi dispiace, ma i compilatori GNU hanno un sistema di assembler inline
molto ostico.
Intanto spero che tu sappia la differenza tra la sintassi dell'assemblatore
 as (GNU Assembler) e dei vari *asm (tasm, nasm, masm ...)
Per utilizzare l'assembler in linea devi utilizzare una specie di macro:
asm("stringa che rappresenta il codice asm");
OSSERVAZIONE: I tab, i newline e tutti i caratteri speciali devono
essere preceduti dal "\" come nella definizione di una costante stringa usuale.
Da non dimenticare che ci sono delle sintassi per definire parametri della
sostituzione del codice assembler che normalmente viene piazzato in maniera
piuttosto grezza nel file asm derivante dalla compilazione.
Ultimo appunto:
Se hai programmato assembler con Tasm o Masm, non ti conviene imparare la
sintassi del GNU assembler per cosi` poco (e` piuttosto ostica).
Scrivi le funzioni col NASM (che ricalca molto gli assemblatori noti del mondo
windows) e genera i corrispondenti file oggetto.
Successivamente inserisci nel file C++ le dichiarazioni delle funzioni che hai
definito in assembler in questo modo:
extern "C" nome_funzione_assembler(parametri);
compila anche il file C++ e poi linka tutto assieme.
Per maggiori informazioni su questo problema non devi fare altro
che digitare "info as" sulla tua linux box. Oppure cercare il sito del NASM,
che non mi ricordo.
Ancora una cosa: da qualche parte devi avere un Assembly-HOWTO o qualcosa
del genere. Parlaproprio di queste cose.
PS: Qualcuno sa se esiste una maniera UFFICIALE e STANDARD di includere il 
codice assembler nel soregente C\C++?
-- 
"Non e` bello cio` che e` bello ma e` bello cio` che piace ... a ME!"
Massimo Lauria a.k.a. Gargamella on Usenet
mailto: 
garga...@mclink.it
Proud member of: NonSense Delivering Service

L'unica cosa che ti posso dire e` che la keyword giusta e`
asm{} e non __asm{} (che a norma di standard mi pare
sia invece un identificatore riservato alle implementazioni).
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

Io ricordo che in Dos la funzione andava dichiarata come extern "C" .
Pero' non so in Linux se funziona ... 


sia invece un identificatore riservato alle implementazioni).
Mi pare che __asm{} si usi sui compilatori Borland.
Il Ghenio
-----
Jesse: Preparatevi a passare dei guai.
James: Dei guai molto grossi!!!
(Team Rocket)
-----