La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

INTERFACCIAMENTO ASSEMBLY - C++ Prof. Marco Solarino.

Presentazioni simili


Presentazione sul tema: "INTERFACCIAMENTO ASSEMBLY - C++ Prof. Marco Solarino."— Transcript della presentazione:

1 INTERFACCIAMENTO ASSEMBLY - C++ Prof. Marco Solarino

2 2 IN COSA CONSISTE Interfacciare l'Assembly con un linguaggio ad alto livello significa utilizzare del codice scritto in linguaggio Assembly all'interno di un'applicazione realizzata con l'altro linguaggio (nel nostro caso il C++).

3 3 A COSA SERVE Funzioni particolari Velocità di esecuzione Compattezza del codice Interfacciare l'Assembly con un linguaggio ad alto livello può essere utile per ottenere:

4 4 COME SI REALIZZA Esistono due modalità per realizzare l'interfacciamento Assembly-C++: Interfacciamento interno Interfacciamento esterno

5 5 INTERFACCIAMENTO INTERNO Il TurboC++ contiene un assemblatore interno (il BASM, Borland Assembler) che offre un sottoinsieme delle potenzialità del TASM (Turbo Assembler) e ci consente di inserire istruzioni in Assembly nel sorgente scritto in C++ (Assembly inline).

6 6 INTERFACCIAMENTO INTERNO Come si fa nel TurboC++ Per invocare il BASM e tradurre l'Assembly si antepone la direttiva asm alle istruzioni interessate: asm MOV AX,1000 Se le istruzioni Assembly sono più di una: asm { Istruzioni Assembly }

7 7 INTERFACCIAMENTO INTERNO Attenzione! Dopo la direttiva asm vale come terminazione dell'istruzione anche l'a capo oltre al punto e virgola, quindi l'eventuale parentesi graffa va aperta sulla stessa riga di asm.

8 8 INTERFACCIAMENTO INTERNO Limiti Alcuni compilatori non consentono di usare le etichette nell'Assembly inline Non si possono usare macro e procedure In pratica l'interfacciamento interno va usato in casi molto semplici, nei quali si debbano usare poche istruzioni Assembly.

9 9 INTERFACCIAMENTO ESTERNO Sorgente *.CPP Sorgente *.ASM I sorgenti sono almeno due Eseguibile *.EXE ?

10 10 INTERFACCIAMENTO ESTERNO LINKER (TLINK) Compilatore (TurboC++) Assemblatore (TASM) Sorgente *.ASM Sorgente *.CPP Oggetto *.OBJ Oggetto *.OBJ Eseguibile *.EXE Generico

11 11 File di progetto *.prj INTERFACCIAMENTO ESTERNO Sorgente *.ASM Sorgente *.CPP Eseguibile *.EXE Nel TurboC++

12 12 INTERFACCIAMENTO ESTERNO Problemi Far capire al compilatore C++ che la funzione Assembly non è nel sorgente *.cpp Rendere visibile al linker la funzione Assembly

13 13 INTERFACCIAMENTO ESTERNO Cosa cè nel cpp extern C {tipo far nome(parametri);... tipo far nome(parametri);} Per esempio: Prima di utilizzarla, facciamo capire al C++ che la funzione Assembly è esterna : extern C {int far doppio(int x);}

14 14 INTERFACCIAMENTO ESTERNO Cosa cè nellasm (1) Al nome della funzione va anteposto _: …o lo facciamo noi doppio proc far _ …o lo facciamo fare al TASM.model small,C

15 15 INTERFACCIAMENTO ESTERNO Cosa cè nellasm (2) Rendiamo visibile (pubblica) la funzione al linker PUBLIC doppio PUBLIC _doppio se abbiamo usato.model small,C, altrimenti

16 16 INTERFACCIAMENTO ESTERNO Cosa non cè nellasm Siccome i segmenti dati e stack vengono definiti dal C++, il sorgente *.asm non dovrà contenere le direttive.data e.stack. Dato che il main della nostra applicazione è nel sorgente *.cpp, il sorgente *.asm non dovrà contenere le macro.startup e.exit 0.


Scaricare ppt "INTERFACCIAMENTO ASSEMBLY - C++ Prof. Marco Solarino."

Presentazioni simili


Annunci Google