![]() |
AV bei Assemblercode
Morgen.
Ich habe mir gerade folgende Funktion geschrieben, um zwei Records zu vergleichen:
Delphi-Quellcode:
An dem mov eax, e1.order knallts - Zugriffsverletzung. Warum? Mein record sieht so aus:
function cmpinfoboxcontentelements
(const e1, e2: TChemInfoBoxContentElement): Integer; asm mov eax, dword ptr e1.shown mov edx, eax xor eax, dword ptr e2.shown jz @cmporder //Überprüfe ob die shown-Werte unterschiedlich sind and eax, eax //Wenn ja, dann überprüfe ob bei e1 shown=true oder bei e2 jz @putn1 mov eax, 1 //Wenn bei e1 shown=true, dann ist Ergebnis 1 jmp @exit @putn1: mov eax, -1 //Wenn bei e2, dann -1 jmp @exit @cmporder: mov eax, e1.order //Überprüfe die Reihenfolgen - und hier knallts auch mov edx, e2.order sub eax, edx //Ziehe e2.order von e1.order ab js @islower //Wenn negativ, springe zu islower und Ergebnis=-1 jnz @isgreater //Wenn nicht 0 (d.h. wenn größer 0) dann Ergebnis=1 mov eax, 0 //Ansonsten Ergebnis=0 jmp @exit @islower: mov eax, -1 jmp @exit @isgreater: mov eax, 1 @exit: end;
Delphi-Quellcode:
TChemInfoBoxContentElement=record
Title: String[20]; FormatStr: String[10]; TypeKind: TTypeKind; ByteOffset, Size: Integer; Order, HeightNeeded: Integer; Shown: Boolean; end; |
Re: AV bei Assemblercode
Andere Frage: warum nutzt du dafür nicht einfach die CompareMem() Funktion?
|
Re: AV bei Assemblercode
Weil ich nur die relevanten Daten vergleichen möchte - Shown und Order. Es geht um eine Vergleichsfunktion, die in einem QuickSort angewandt wird.
|
Re: AV bei Assemblercode
Zitat:
|
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Object-Pascal / Delphi-Language" nach "Programmieren allgemein" verschoben.
Ist ja eigentlich keine Frage zu Delphi/Pascal |
Re: AV bei Assemblercode
Das hab ich gestern noch selber gemerkt.
Ich hab meinen Code dann komplett umgeschrieben, war aber viel zu müde, um das noch zu posten. Ich habe die Assemblerfunktion jetzt komplett rausgenommen und vergleiche nur noch nach order, was auch ohne Funktion geht. Trotzdem Danke @all. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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