hier 'ne kleine Spielerei
das läßt sich bestimmt noch extremst ausbauen und erweitern.
cool wäre auch, wenn die hinzugefügten Codes/Befehle erstmal in einer Tabelle/Liste gespeichert werden, so das man sie noch editieren kann und erst im Execute daraus der eigentliche
ASM-Code zusammengesetzt wird.
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Var Code: TASM;
i, i2: Integer;
Begin
i := StrToInt(Edit1.Text);
i2 := StrToInt(Edit2.Text);
Edit3.Text := 'calc';
Code := TASM.Create;
Try
Code.Write(cPUSH, rECX);
Code.Write(cMOV, rECX, 100);
Code.Write(cIMUL, rEDX);
Code.Write(cADD, rEAX, rECX);
Code.Write(cPOP, rECX);
Code.Write(cRET);
Code.SetConvention(ccRegister);
Code.AddPram(i);
Code.AddPram(i2);
i := Code.Execute;
// i := Code.Result;
Finally
Code.Free;
End;
Edit3.Text := IntToStr(i);
End;
man wird es nicht glauben, aber dieser hochkomplizierte Code kann höchst wissenschaftliche Berechnungen durchführen
i := i * i2 + 100;
nicht wundern, da ist auch aktuell fast nichts und vieles teils hardkodiert drinnen, welches man genau für das Beispiel braucht
(das PUSH und POP ist natürlich nicht unbedingt nötig, aber so ist der Code etwas länger
)
[add]
diese
Delphi-Quellcode:
For i := 7 downto 0 do Write(cNOP);
Write(cMOV, rEAX, nil);
Write(cJMP, rEAX);
ist jetzt einfach nur 'nen billiger Schutzblock, falls z.B. jemand das RET am Ende vergißt.