Home   Cover Cover Cover Cover
 

Common Intermediate Language (CIL)

Beispiel "untypisierte Anweisungen"

CIL-Anweisungen machen oft keine Angaben über den Typ der Argumente, während Java-Bytecode-Anweisung diesen immer spezifizieren.
Im Beispiel stellen wir die Anweisungen für das Laden, Addidieren und Speichern von Integer- und Gleitkommazahlen in CIL und Java-Bytecode gegenüber.

Dazu verwenden wir eine Klasse Addition, die in zwei statischen Methoden jeweils die Werte zweier lokaler Integer- bzw. Gleitkommavariablen lädt, addiert und das Ergebnis in einer dritten lokalen Variablen speichert.

Addition.cs
public class Addition {
  public static void AddInt () {
    int i1 = 6;
    int i2 = 17;
    
    int res = i1 + i2;
  }
  
  public static void AddFloat () {
    float f1 = 34.4f;
    float f2 = 43.1f;
    
    float res = f1 + f2;
  }
  
  public static void Main () {
    AddInt();
    AddFloat();
  }
}

Mit dem IL-Disassembler (ildasm.exe) können wir den erzeugten CIL-Code der beiden Methoden betrachen.





Die Java-Version der Klasse Addition ist fast völlig ident mit der C#-Version.

Addition.java
public class Addition {
  public static void addInt () {
    int i1 = 6;
    int i2 = 17;
    
    int res = i1 + i2;
  }
  
  public static void addFloat () {
    float f1 = 34.4f;
    float f2 = 43.1f;
    
    float res = f1 + f2;
  }
  
  public static void main (String[] args) {
    addInt();
    addFloat();
  }
}


Der Java-Class File Disassembler (javap.exe) zeigt uns die Java-Bytecode-Anweisungen.







Wir erkennen sofort die unterschiedlichen Anweisungen für das Laden, Addieren und Speichern von Integer- bzw. Gleitkommawerten im Java-Bytecode.