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

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
... 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 :)