1 / 16

INTERFACCIAMENTO ASSEMBLY - C++

INTERFACCIAMENTO ASSEMBLY - C++. Prof. Marco Solarino. 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++). IN COSA CONSISTE.

Download Presentation

INTERFACCIAMENTO ASSEMBLY - C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. INTERFACCIAMENTO ASSEMBLY - C++ Prof. Marco Solarino

  2. 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++). IN COSA CONSISTE

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

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

  5. 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). INTERFACCIAMENTO INTERNO

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

  7. 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. INTERFACCIAMENTO INTERNOAttenzione!

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

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

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

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

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

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

  14. INTERFACCIAMENTO ESTERNOCosa c’è nell’asm (1) Al nome della funzione va anteposto ‘_’: …o lo facciamo noi _ doppio proc far …o lo facciamo fare al TASM .model small,C

  15. INTERFACCIAMENTO ESTERNOCosa c’è nell’asm (2) Rendiamo visibile (pubblica) la funzione al linker PUBLIC doppio se abbiamo usato , altrimenti .model small,C PUBLIC _doppio

  16. INTERFACCIAMENTO ESTERNOCosa non c’è nell’asm 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.

More Related