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
![Nerd](images/smilies/nerd.gif)
(das PUSH und POP ist natürlich nicht unbedingt nötig, aber so ist der Code etwas länger
![Laughing](images/smilies/icon_lol.gif)
)
[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.
Ein Therapeut entspricht 1024 Gigapeut.