logo

CIL oder MSIL | Microsoft Intermediate Language oder Common Intermediate Language

Die Microsoft Intermediate Language (MSIL), auch bekannt als Common Intermediate Language (CIL), ist eine Reihe von Anweisungen, die plattformunabhängig sind und vom sprachspezifischen Compiler aus dem Quellcode generiert werden. Die MSIL ist plattformunabhängig und kann daher auf jeder von der Common Language Infrastructure unterstützten Umgebung wie Windows ausgeführt werden .NETZ Laufzeit.
Die MSIL wird vom JIT-Compiler in einen bestimmten computerumgebungsspezifischen Maschinencode umgewandelt. Dies geschieht, bevor die MSIL ausgeführt werden kann. Außerdem wird die MSIL auf Anforderungsbasis in den Maschinencode konvertiert, d. h. der JIT-Compiler kompiliert die MSIL nach Bedarf und nicht als Ganzes.

Ausführungsprozess in Common Language Runtime (CLR): Der Ausführungsprozess, der die Erstellung der MSIL und die Konvertierung der MSIL in Maschinencode durch den JIT-Compiler umfasst, ist wie folgt:



MSIL oder CIL

Bilderspiele für Android
  • Der Quellcode wird in der Kompilierungszeit der CLR von einem sprachspezifischen Compiler in das MSIL umgewandelt. Außerdem werden neben der MSIL auch Metadaten in der Kompilierung erzeugt. Die Metadaten enthalten Informationen wie die Definition und Signatur der Typen im Code, Laufzeitinformationen usw.
  • Durch die Assemblierung der MSIL wird eine Common Language Infrastructure (CLI)-Assembly erstellt. Bei dieser Assembly handelt es sich im Wesentlichen um eine kompilierte Codebibliothek, die für Sicherheit, Bereitstellung, Versionierung usw. verwendet wird. Es gibt zwei Arten: Prozessassembly (EXE) und Bibliotheksassembly (DLL).
  • Der JIT-Compiler konvertiert dann die Microsoft Intermediate Language (MSIL) in den Maschinencode, der für die Computerumgebung spezifisch ist, auf der der JIT-Compiler ausgeführt wird. Die MSIL wird auf Anforderungsbasis in den Maschinencode konvertiert, d. h. der JIT-Compiler kompiliert die MSIL nach Bedarf und nicht als Ganzes.
  • Der mit dem JIT-Compiler gewonnene Maschinencode wird dann vom Prozessor des Computers ausgeführt.

Beispiel: Die MSIL wird vom sprachspezifischen Compiler aus dem unten angegebenen Quellcode generiert. Um die MSIL im Detail zu verstehen, wird einfacher C#-Quellcode mit der Klasse Demo gedruckt techcodeview.com ist wie folgt gegeben:








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

>

Ankita Dave

>

Die MSIL, die vom C#-Compiler für den oben bereitgestellten Code erstellt wird, lautet wie folgt:

 // =============== 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 der oben genannten MSIL gibt es Opcodes, die ein oder zwei Bytes lang sind. Die Basisklassendeklarationen, von denen alle anderen Klassen geerbt werden, sind in der enthalten mscorlib.dll . In der Methode Main() die Anweisung ldstr lädt die Zeichenfolge techcodeview.com auf dem Stapel. Dann die Statik System.Console.Writeline Die Funktion wird aufgerufen und die Zeichenfolge wird vom Stapel entfernt. Schließlich signalisiert die ret-Anweisung das Ende des Funktionsaufrufs.
Dann ist die .ctor( )-Anweisung impliziert einen Standardkonstruktor ohne Parameter für die Klasse Demo. Dieser Konstruktor wird vom Compiler automatisch für die nicht statische Klasse Demo erstellt. Die Aufrufanweisung übergibt den Basisobjektkonstruktor und die Ret-Anweisung signalisiert das Ende des Funktionsaufrufs.