Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Funktionen in Assembler unter Delphi 7

  Alt 12. Jul 2013, 15:10
Deine Funktion versucht auf die Adresse Zahl + 2 zuzugreifen. Was du meinst ist die Adresse von Zahl + 2. Das kann so nicht funktionieren, egal wie du diese Assembleranweisung verpackst... denn der Parameter wird in einem Register übergeben. Da gibt es keine Adresse, die man erhöhen könnte...
Zudem liest du aus Zahl (also aus dem Register EAX) und schreibst in AX, also aus dem selben Register. Auch das geht nicht.

Wenn das früher mal ging, war das eine andere Aufrufkonvention, die die Parameter auf den Stack gelegt hat.

Gehen tut es so:
Delphi-Quellcode:
function HiWord(const ANumber: Longint): Word; assembler;
asm
  shr ANumber, 16
end;

function LoWord(const ANumber: Longint): Word; assembler;
asm
  and ANumber, $FF
end;
Oder du nutzt gleich Lo und Hi, die Delphi schon selbst kennt. Angesichts verschiedener Plattformen, die Delphi unterstützt, ist es auch die weit bessere Lösung ohne Assembler zu arbeiten wo das möglich ist.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat