logo

CIL o MSIL | Microsoft Intermediate Language o Common Intermediate Language

Il Microsoft Intermediate Language (MSIL), noto anche come Common Intermediate Language (CIL), è un insieme di istruzioni indipendenti dalla piattaforma e generate dal compilatore specifico del linguaggio dal codice sorgente. MSIL è indipendente dalla piattaforma e di conseguenza può essere eseguito su qualsiasi ambiente supportato da Common Language Infrastructure come Windows .NETTO tempo di esecuzione.
Il codice MSIL viene convertito in un particolare codice macchina specifico dell'ambiente informatico dal compilatore JIT. Questa operazione viene eseguita prima che l'MSIL possa essere eseguito. Inoltre, l'MSIL viene convertito nel codice macchina in base ai requisiti, ovvero il compilatore JIT compila l'MSIL come richiesto anziché interamente.

Processo di esecuzione in Common Language Runtime (CLR): Il processo di esecuzione che include la creazione dell'MSIL e la conversione dell'MSIL in codice macchina da parte del compilatore JIT è il seguente:



MSIL o CIL

istruzione if-else java
  • Il codice sorgente viene convertito in MSIL da un compilatore specifico della lingua durante la compilazione di CLR. Inoltre, insieme all'MSIL, nella compilazione vengono prodotti anche i metadati. I metadati contengono informazioni come la definizione e la firma dei tipi nel codice, informazioni sul runtime, ecc.
  • Un assembly CLI (Common Language Infrastructure) viene creato assemblando MSIL. Questo assembly è fondamentalmente una libreria di codici compilati utilizzata per la sicurezza, la distribuzione, il controllo delle versioni, ecc. Ed è di due tipi, ovvero assembly di processo (EXE) e assembly di libreria (DLL).
  • Il compilatore JIT converte quindi Microsoft Intermediate Language (MSIL) nel codice macchina specifico dell'ambiente informatico su cui viene eseguito il compilatore JIT. L'MSIL viene convertito nel codice macchina in base ai requisiti, ovvero il compilatore JIT compila l'MSIL come richiesto anziché interamente.
  • Il codice macchina ottenuto utilizzando il compilatore JIT viene quindi eseguito dal processore del computer.

Esempio: L'MSIL viene generato dal compilatore specifico della lingua dal codice sorgente indicato di seguito. Per comprendere il codice MSIL in dettaglio, è sufficiente stampare il codice sorgente C# con la classe Demo techcodeview.com è dato come segue:








using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }>

Giochi iMessage su Android

>

>

Il codice MSIL creato dal compilatore C# per il codice fornito sopra viene fornito come segue:

 // =============== CLASS MEMBERS DECLARATION =================== .class public auto ansi beforefieldinit Demo extends [mscorlib]System.Object { .method public hidebysig static void Main() cil managed { // .maxstack 8 IL_0000: nop IL_0001: ldstr 'techcodeview.com' IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Demo::Main .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } // end of method Demo::.ctor } // end of class Demo // =============================================================>

Nell'MSIL riportato sopra, sono presenti codici operativi lunghi uno o due byte. Le dichiarazioni della classe base da cui vengono ereditate tutte le altre classi sono contenute nel file mscorlib.dll . Nel metodo Main(), l'istruzione ldstr carica la stringa techcodeview.com sulla pila. Poi lo statico System.Console.Writeline viene chiamata la funzione e la stringa viene estratta dallo stack. Infine, l'istruzione ret segnala la fine della chiamata di funzione.
Poi il .ctor( ) implica un costruttore predefinito senza parametri per la classe Demo. Questo costruttore viene creato automaticamente dal compilatore per la classe non statica Demo. L'istruzione call passa al costruttore dell'oggetto base e l'istruzione ret segnala la fine della chiamata alla funzione.