Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Assembler-Opcodes in Delphi 7 verwenden (https://www.delphipraxis.net/47001-assembler-opcodes-delphi-7-verwenden.html)

skyobserver 4. Jun 2005 20:25


Assembler-Opcodes in Delphi 7 verwenden
 
Ich versuche gerade eine Funktion zu schreiben die überprüft, ob CPU und Betriebssystem
die Ausführung von SSE3-Befehlen erlauben.
Laut Intel Referenz führt man einfach einen SSE3 Befehl in einem TRY/EXCEPT-Block aus,
um zu sehen ob das System eine Exception auslöst und eine ungültige Anweisung bemängelt.
Leider kennt Delphi7 die Mnemonics des SSE3-Befehlssatz noch nicht. Es müsste aber möglich
sein die Anweisung direkt als Opcode einzugeben:

Delphi-Quellcode:
function SSE3: Boolean;
begin
  try
    asm
      DD 0660FD0C0h; //ADDSUBPD XMM0, XMM0 (Ist das korrekt umgesetzt?)
    end;
    Result := True; //SSE3 wird untersützt
  except
    Result := False; //Keine SSE3 Unterstützung
  end;
end;
DD definiert ein DWORD das der Compiler unverändert speichert.
66 0F D0 ist der Opcode für ADDSUBPD,
C0 ist der Opcode für die Operanden XMM0, XMM0

Weiß einer ob das richtig ist/funktioniert? Unsicher bin ich bei der
Reihenfolge der Bytes (Intel Speicherformat). Wenn ich vier einzelne
BYTE (DB) oder ein DWORD (DD) angebe gibt es keinen Fehler (der Opcode
scheint auch rückwärts für den Prozessor sinnvollzu sein). Wenn ich
zwei WORD definiere gibt es eine Schutzverletzung.

Bin dankbar für jeden Hinweis...

Dax 4. Jun 2005 20:46

Re: Assembler-Opcodes in Delphi 7 verwenden
 
So:
Delphi-Quellcode:
asm
  DB $06, $60, $FD0, $C0;
end;

skyobserver 4. Jun 2005 21:39

Re: Assembler-Opcodes in Delphi 7 verwenden
 
Danke erstmal...
Zitat:

DB $06, $60, $FD0, $C0;
Wieso sind da drei Nibbles in deinem dritten Datenwort?

Meintest du das:
Delphi-Quellcode:
asm
  DB $66, $0F $D0, $C0;
end;
So wirds auch von Delphi angenommen:
Delphi-Quellcode:
asm
  DB 066h //Die erste "0" muß davor gestellt werden damit
  DB 00Fh //Delphi den Wert als Hexwert akzeptiert
  DB 0D0h //Ist aber nur zwingend erforderlich wenn der
  DB 0COh //Hexwert mit einem Buchstaben (A-F) beginnt
end;
Hauptsache die Bytes werden in der richtigen Reihenfolge gespeichert...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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