logo

CIL eller MSIL | Microsoft Intermediate Language eller Common Intermediate Language

Microsoft Intermediate Language (MSIL), også kjent som Common Intermediate Language (CIL) er et sett med instruksjoner som er plattformuavhengige og genereres av den språkspesifikke kompilatoren fra kildekoden. MSIL er plattformuavhengig og kan følgelig kjøres på alle Common Language Infrastructure-støttede miljøer som Windows .NETT kjøretid.
MSIL konverteres til en bestemt datamaskinmiljøspesifikk maskinkode av JIT-kompilatoren. Dette gjøres før MSIL kan utføres. MSIL blir også konvertert til maskinkoden på kravbasis, det vil si at JIT-kompileren kompilerer MSIL etter behov i stedet for hele den.

Utførelsesprosess i Common Language Runtime (CLR): Utførelsesprosessen som inkluderer opprettelsen av MSIL og konverteringen av MSIL til maskinkode av JIT-kompilatoren er gitt som følger:



MSIL eller CIL

xvideoservicethief ubuntu 14.04 nedlasting
  • Kildekoden konverteres til MSIL av en språkspesifikk kompilator i kompileringstiden til CLR. Sammen med MSIL produseres det også metadata i kompileringen. Metadataene inneholder informasjon som definisjon og signatur av typene i koden, kjøretidsinformasjon osv.
  • En Common Language Infrastructure (CLI)-sammenstilling opprettes ved å sette sammen MSIL. Denne sammenstillingen er i utgangspunktet et kompilert kodebibliotek som brukes til sikkerhet, distribusjon, versjonering, etc. og den er av to typer, dvs. prosessmontering (EXE) og bibliotekmontering (DLL).
  • JIT-kompilatoren konverterer deretter Microsoft Intermediate Language (MSIL) til maskinkoden som er spesifikk for datamaskinmiljøet som JIT-kompilatoren kjører på. MSIL konverteres til maskinkoden på kravbasis, dvs. JIT-kompilatoren kompilerer MSIL etter behov i stedet for hele den.
  • Maskinkoden oppnådd ved hjelp av JIT-kompilatoren blir deretter utført av prosessoren på datamaskinen.

Eksempel: MSIL genereres av den språkspesifikke kompilatoren fra kildekoden gitt nedenfor. For å forstå MSIL i detalj, enkel C#-kildekode med klassen Demo som skriver ut techcodeview.com er gitt som følger:








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

>

>

string split bash

MSIL som er opprettet av C#-kompilatoren for koden gitt ovenfor, er gitt som følger:

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

I MSIL ovenfor er det opkoder som er en eller to byte lange. Basisklasseerklæringene som alle andre klasser er arvet fra, finnes i mscorlib.dll . I metoden Main(), instruksjonen ldstr laster strengen techcodeview.com på stabelen. Så det statiske System.Console.Writeline funksjonen kalles og strengen er spratt fra stabelen. Til slutt signaliserer ret-instruksjonen slutten av funksjonskallet.
Og så .ctor( )-setningen innebærer en standardkonstruktør uten parametere for klassen Demo. Denne konstruktøren opprettes automatisk av kompilatoren for den ikke-statiske klassen Demo. Anropsinstruksjonen passerer basisobjektkonstruktøren og ret-instruksjonen signaliserer slutten av funksjonskallet.