![]() |
Opcodes berechnen - wie?
So Leute, jetzt gehts los :mrgreen:.
Mich würde mal interessieren, wie aus asm-Mnemonics letzendlich die Opcodes werden, bzw. wie ich diese berechnen könnte. Zum Beispiel ist $D9FE der Opcode der der FPU sagt: "Gib mal für dein aktuelles Stackelement den Sinus raus." Okay, soweit geht's noch - dass kann man der IA-32 Spezifikation leicht entnehmen. Interessanter wird's bei Anweisungen, die eine Adresse mit sich tragen, z.B.: $8BEC - heisst: mov ebp, esp oder: $DD4508 - heisst: fld qword ptr [ebp+$08] ($DD=fld, aber wie komme ich an den Rest?) oder: $5D - heisst: pop ebp (Wie? ein Wort für Befehl+Adresse??) Neolithos wird wissen worauf ich hinaus will :zwinker:. Es geht letzten Endes um einen mathem. Parser der die Formeln nicht in Datenstrukturen wie Bäume oder irgendwie geartete Stacks packt, sondern ganz direkt ausführbaren Code ins RAM schreibt, und den Programcounter dahin schmeisst. (Was an sich auch schon klappt, ein sin(1) hab ich so schon hinbekommen :).) Dann wäre die geparste Rechnung u.U. genau so schnell wie einkompiliert, da ja tatsächlich kompiliert! (Exceptionhandling und Kontrollstrukturen bleiben zunächst mal aussen vor. Mal sehen wie viel man davon wirklich braucht :).) Nun sollen da aber natürlich nicht nur Konstanten in der Formel Möglich sein, sondern auch Variablen. Dass heisst dass der von mir erzeugte Maschinencode auf Delphi-Variablen referenzieren können müsste, und dafür brauche ich ja a) ihre Adressen, und b) das Wissen wie diese Informationen im Maschinencode zu hinterlegen wären. Ich hatte mal ganz einfach eine Funktion mit Delphi geschrieben, und die compilierte Funktion aus dem CPU-Fenster direkt so in den Speicher geschrieben, und den Programcounter dahin gepackt. Leider hat das nur für sehr einfache Funktionen geklappt, wie halt sin(1). Sobald übergebene Parameter referenziert werden sollten, hat's geknallt. (AVs) Wenn dazu irgend jemand auch nur den kleinsten Tipp hätte... sei's Literatur, Web-Adressen was auch immer (bevorzugt in Deutsch, Englisch geht aber auch), oder gar direkt helfen könnte, da wär ich einen ultra-großen Schritt weiter! Danke schonmal, dizzy |
Re: Opcodes berechnen - wie?
Zitat:
Zitat:
Zitat:
|
Re: Opcodes berechnen - wie?
Zitat:
Bei Radim Picha auf der Seite gibt es C-Quellcode zur Bestimmung der Länge von x86-Anweisungen ( ![]() Zitat:
|
Re: Opcodes berechnen - wie?
Zitat:
Zitat:
Zitat:
\\edit: Wäre klasse, wenn du mir sagen könntest wo ich so eine Referenz von der du sprachst finden kann. Ich hab mich schon bald kugelig gegoogelt, und finde irgendwie nicht so wirklich brauchbares :?. Vieeelen Dank euch beiden schon mal! Werd mich morgen mal eingehend damit auseinandersetzen! *froi* Guts Nächtle, dizzy |
Re: Opcodes berechnen - wie?
Falls es auch ein Buch tut, empfehle ich "Assembler gepackt" von Joachim Rohde, da ist hinten eine, soweit ich das beurteilen kann, recht ausführliche Opcode-Tabelle im Anhang, und teuer ist das Buch auch nicht (15€, damals jedenfalls (c; )
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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 by Thomas Breitkreuz