logo

CIL of MSIL | Microsoft Intermediate Language of Common Intermediate Language

De Microsoft Intermediate Language (MSIL), ook wel bekend als de Common Intermediate Language (CIL), is een reeks instructies die platformonafhankelijk zijn en door de taalspecifieke compiler uit de broncode worden gegenereerd. De MSIL is platformonafhankelijk en kan daarom worden uitgevoerd in elke door de Common Language Infrastructure ondersteunde omgeving, zoals Windows .NETTO looptijd.
De MSIL wordt door de JIT-compiler omgezet in een specifieke computeromgeving-specifieke machinecode. Dit gebeurt voordat de MSIL kan worden uitgevoerd. Ook wordt de MSIL op basis van vereisten omgezet in de machinecode, dat wil zeggen dat de JIT-compiler de MSIL compileert zoals vereist in plaats van het geheel.

Uitvoeringsproces in Common Language Runtime (CLR): Het uitvoeringsproces dat de creatie van de MSIL en de conversie van de MSIL naar machinecode door de JIT-compiler omvat, wordt als volgt gegeven:



MSIL of CIL

verschil tussen binaire boom en binaire zoekboom
  • De broncode wordt tijdens het compileren van de CLR door een taalspecifieke compiler omgezet in de MSIL. Naast de MSIL worden er bij de compilatie ook metadata geproduceerd. De metadata bevatten informatie zoals de definitie en handtekening van de typen in de code, runtime-informatie, enz.
  • Er wordt een Common Language Infrastructure (CLI)-assembly gemaakt door de MSIL samen te stellen. Deze assembly is in feite een gecompileerde codebibliotheek die wordt gebruikt voor beveiliging, implementatie, versiebeheer, enz. en bestaat uit twee typen, namelijk procesassemblage (EXE) en bibliotheekassemblage (DLL).
  • De JIT-compiler converteert vervolgens de Microsoft Intermediate Language (MSIL) naar de machinecode die specifiek is voor de computeromgeving waarop de JIT-compiler draait. De MSIL wordt op basis van vereisten omgezet in de machinecode, dat wil zeggen dat de JIT-compiler de MSIL compileert zoals vereist in plaats van het geheel.
  • De met behulp van de JIT-compiler verkregen machinecode wordt vervolgens uitgevoerd door de processor van de computer.

Voorbeeld: De MSIL wordt gegenereerd door de taalspecifieke compiler uit de onderstaande broncode. Om de MSIL in detail te begrijpen, eenvoudige C#-broncode met de klasse Demo die wordt afgedrukt techcodeview.com wordt als volgt gegeven:








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

>

>

stringmethoden in Java

De MSIL die door de C#-compiler is gemaakt voor de hierboven verstrekte code, wordt als volgt gegeven:

 // =============== 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 // =============================================================>

In de bovenstaande MSIL zijn er opcodes die één of twee bytes lang zijn. De basisklassedeclaraties waarvan alle andere klassen worden geërfd, zijn opgenomen in de mscorlib.dll . In de methode Main(), de instructie ldstr laadt de string techcodeview.com op de stapel. Dan de statische Systeem.Console.Writeline functie wordt aangeroepen en de string wordt van de stapel gehaald. Ten slotte signaleert de ret-instructie het einde van de functieaanroep.
Dan de .ctor( ) -instructie impliceert een standaardconstructor zonder parameters voor de klasse Demo. Deze constructor wordt automatisch door de compiler gemaakt voor de niet-statische klasse Demo. De oproepinstructie passeert de basisobjectconstructor en de ret-instructie signaleert het einde van de functieaanroep.