Die IL-Assembly realisiert das Ausgabeergebnis der Addition zweier Zahlen

Es wird gesagt, dass die Addition von 2 Zahlen in der IL-Assemblierung noch nie implementiert wurde. Nach ein wenig Basteln lautet der implementierte Code wie folgt.

.assembly extern mscorlib {}
 
 .assembly Test
 {
     .ver 1:0:1:0
 }
 .module test.exe
  
 .method static void main() cil managed
 {
     .maxstack 8
     .entrypoint
    .locals init (int32 V_0,    int32 V_1)   

     ldc.i4.s   31
     stloc.0
     ldc.i4.s   27
     stloc.1
     ldloc.0
     ldloc.1
     add
     call       void [mscorlib]System.Console::WriteLine(int32)
     ret
 }

Der Build-Vorgang ist wie folgt: Da es viele Textdateien gibt, habe ich Angst vor Fehlern. Verwenden Sie daher den Befehl type, um den Code vor dem Erstellen zu überprüfen.

.maxstack 8, dies ist die Länge des angegebenen Stapels; wenn es in .maxstack 1 geändert wird, beträgt die Stapellänge 1, was nicht ausreicht, um 2 Zahlen einzugeben; beim Erstellen und Ausführen kommt es zu einem Fehler wie folgt;

 

.locals init (int32 V_0, int32 V_1), dieser Satz dient zum Definieren von zwei lokalen Variablen. Wenn ohne Definition erstellt und ausgeführt wird, ist der Fehler wie folgt;

 

 Ich weiß nicht viel über IL-Assembly und seine Syntax. Einige Auszüge aus dem Internet lauten wie folgt:

Die Funktion der Anweisung ldc.i4.0
besteht darin, eine Konstante in den Stapel zu laden. i4 bedeutet, dass die Konstante eine 32-Bit-Ganzzahl mit doppelter Wortlänge ist und der Anfangswert 0 ist.
ldc kann als Lastkonstante, Lastkonstante verstanden werden. Der Vorgang, den es abschließt, ist wie (top)<=0, top=top+1.

Die Funktion der Anweisung stloc.1
besteht darin, das aktuell oberste Element des Stapels in der ersten lokalen Variablen zu speichern. „1“ gibt an, dass der Operand die erste lokale Variable ist.
stloc kann als lokales Speichern verstanden werden, wobei lokale Variablen gespeichert werden.


Die von der Anweisung ldc.i4.4 abgeschlossene Operation lautet wie folgt: (top)<=4, top=top+1;

Die Funktion dieser Anweisung stloc.2
besteht darin, das aktuell oberste Element des Stapels in der zweiten lokalen Variablen zu speichern.

ldloc.2
ldloc.0
ldloc.1
Diese drei Anweisungen werden verwendet, um die zweite, nullte und erste lokale Variable jeweils auf den Stapel zu laden, wie in Abbildung h dargestellt. ldloc kann als lokale Variable laden, lokale Variable laden verstanden werden.

Add fügt
das aktuelle Stack-Top-Element zur zweiten Stack-Einheit hinzu;

    Sie werden alle auf dem Stapel betrieben, wobei <= eine Zuweisung ist;

Acho que você gosta

Origin blog.csdn.net/bcbobo21cn/article/details/132126214
Recomendado
Clasificación