AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi just-in-time - Codeerzeugung : Funktionen aus Formeln?
Thema durchsuchen
Ansicht
Themen-Optionen

just-in-time - Codeerzeugung : Funktionen aus Formeln?

Ein Thema von helgew · begonnen am 18. Okt 2009 · letzter Beitrag vom 23. Okt 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.531 Beiträge
 
Delphi 12 Athens
 
#1

Re: just-in-time - Codeerzeugung : Funktionen aus Formeln?

  Alt 23. Okt 2009, 00:13
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.
Angehängte Dateien
Dateityp: 7z asm_111.7z (155,6 KB, 12x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz