Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Assembler: wie WriteLn aufrufen?
reQuiem - Mi 26.11.08 00:12
Titel: Assembler: wie WriteLn aufrufen?
Der Titel sagt eigentlich schon alles. Folgendes will nicht funktionieren, ebensowenig wie Variationen von Writeln (WritLn, writeln etc.). Was muss ich tun?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| begin a := 10; asm push a call @Writeln end; readln; end. |
Gruß,
Niklas
jaenicke - Mi 26.11.08 00:36
Schau dir mal diesen Beitrag an, die ersten drei Parameter einer Funktion oder Prozedur werden nicht in den Stack gelegt sondern in EAX, EDX und ECX abgelegt, erst wenn es mehr als 3 sind landen die auf dem Stack.
http://www.delphipraxis.net/topic94005,0,asc,0.html
Du musst also statt push den Parameter in eax legen, allerdings ist Writeln glaube ich keine irgendwo definierte Funktion sondern Compilermagic, du müsstest das also wenn dem so ist außerhalb des Assemblercodes aufrufen glaube ich.
BenBE - Mi 26.11.08 13:54
Man muss in diesem Fall die Compiler MAgic nachbilden. Hab ich letztens erst gesagt, welche Funktionen es da gibt (siehe Forensuche) und dann entsprechend machen.
Reinhard Kern - Mi 26.11.08 20:13
jaenicke hat folgendes geschrieben : |
... allerdings ist Writeln glaube ich keine irgendwo definierte Funktion sondern Compilermagic, du müsstest das also wenn dem so ist außerhalb des Assemblercodes aufrufen glaube ich. |
Hallo,
falls es etwas nicht als linkbare Prozedur gibt, kann man ja immer so ähnlich kapseln:
Delphi-Quelltext
1: 2: 3: 4:
| procedure WriteLn4ASM (out : file; txt : string); begin Writeln (out,txt); end; |
und in Assembler dann WriteLn4ASM aufrufen.
Gruss Reinhard
BenBE - Mi 26.11.08 20:34
Man kann WriteLn durchaus mit ASM aufrufen, bedarf aber etwas mehraufwand, da man sich die benötigten Dinge erst selber zusammensuchen muss. Ggf. einfach mal schauen, wie das im CPU-Fenster aussieht und dass dann entsprechend so anpassen, dass es mit den Werten\Aufrufnahmen für die Compiler Magic Funktionen stimmt.
reQuiem - Mi 26.11.08 21:14
Danke für eure Tipps und Infos! Habt mir sehr geholfen :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!