logo

CIL або MSIL | Microsoft Intermediate Language або Common Intermediate Language

Проміжна мова Microsoft (MSIL), також відома як Загальна проміжна мова (CIL), — це набір інструкцій, які не залежать від платформи та генеруються компілятором для певної мови з вихідного коду. MSIL не залежить від платформи, і, отже, його можна виконувати в будь-якому середовищі, що підтримується спільною мовною інфраструктурою, наприклад Windows .NET час виконання.
MSIL перетворюється на спеціальний машинний код комп'ютерного середовища компілятором JIT. Це робиться перед виконанням MSIL. Крім того, MSIL перетворюється на машинний код на основі вимог, тобто JIT-компілятор компілює MSIL відповідно до вимог, а не повністю.

Процес виконання в загальномовному середовищі (CLR): Процес виконання, який включає створення MSIL і перетворення MSIL в машинний код за допомогою JIT-компілятора, наводиться так:



MSIL або CIL

перетворити int на рядок c++
  • Вихідний код перетворюється на MSIL компілятором для певної мови під час компіляції CLR. Крім того, разом із MSIL, метадані також створюються в компіляції. Метадані містять таку інформацію, як визначення та підпис типів у коді, інформацію про час виконання тощо.
  • Збірка спільної мовної інфраструктури (CLI) створюється шляхом збирання MSIL. Ця збірка в основному є скомпільованою бібліотекою коду, яка використовується для безпеки, розгортання, керування версіями тощо, і вона буває двох типів, тобто збірка процесу (EXE) і збірка бібліотеки (DLL).
  • Потім компілятор JIT перетворює проміжну мову Microsoft (MSIL) на машинний код, який є специфічним для комп’ютерного середовища, на якому працює компілятор JIT. MSIL перетворюється на машинний код на основі вимог, тобто JIT-компілятор компілює MSIL відповідно до вимог, а не повністю.
  • Машинний код, отриманий за допомогою компілятора JIT, потім виконується процесором комп'ютера.

приклад: MSIL генерується компілятором для певної мови з наведеного нижче вихідного коду. Щоб детально зрозуміти MSIL, простий вихідний код C# із класом Demo, який друкує techcodeview.com надається таким чином:








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

js onclick

>

>

MSIL, який створюється компілятором C# для наданого вище коду, надається таким чином:

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

У наведеному вище MSIL є коди операції довжиною один або два байти. Оголошення базового класу, від якого успадковуються всі інші класи, містяться в mscorlib.dll . У методі Main(), інструкція ldstr завантажує рядок techcodeview.com на стеку. Потім статика System.Console.Writeline викликається функція, і рядок витягується зі стеку. Нарешті, інструкція ret сигналізує про закінчення виклику функції.
Потім .ctor( ) передбачає конструктор за замовчуванням без параметрів для класу Demo. Цей конструктор автоматично створюється компілятором для нестатичного класу Demo. Інструкція виклику передає конструктор базового об’єкта, а інструкція ret сигналізує про завершення виклику функції.