![]() |
Re: ASM - PChars vergleichen
Ok danke... wollte es auch eigentlich mit Boolean machen aber da ich noch nicht so viel Ahnung von Booleans in ASM hab (eigentlich gar keine^^) aber dafür von PChars, hab ichs erstmal so gemacht :mrgreen: Also im Ernstfall würd ich ja für sowas auch nie im Leben en PChar oder nen String nehmen :lol:
Wobei es nett wäre wenn du die neu hinzugefügten Zeilen erklären würdest :shock: :wiejetzt: Ach ja du musst bei bei dem Code jne durch je ersetzen ;)^^ |
Re: ASM - PChars vergleichen
Ein Boolean ist nichts anderes als ein Byte. Nur dass er normalerweise nur $00 oder $FF enthält.
|
Re: ASM - PChars vergleichen
nein, das jne war für den Fall gedacht daß repe cmpsb mit ZF=0 beendet wird. Das dann folgende cmp sollte prüfen, ob das letzte geprüfte Zeichen im zu prüfenden String das Ende-Byte war. Da hab ich mich durch vorherige Kommentare aufs Glatteis locken lassen.
Ich habe meinen Beitrag noch mal überarbeitet. so wie es jetzt im Beitrag steht sollte es funktionieren. repe cmpsb vergleicht solange bis Ungleichheit festgestellt wird, maximal aber 7 Zeichen (einschließlich Nullbyte am Ende der Strings). Wenn also nach Abarbeitung dieses Befehlt (besser der Befehlskombination) ZF=1 ist, dann wurden 7 Zeichen überprüft und alle Zeichen waren identisch. ZF kann nur in folgenden Fällen = 0 sein. 1) A ist länger als PW. Dann ergibt der Vergleich Nullbyte aus PW vs. Zeichen aus A ein false. 2) A ist kürzer als PW. Dann ergibt der Vergleich Zeichen aus PW vs. Nullbyte aus A ein false. 3) A und PW sind gleichlang, aber der Vergleich eines der Zeichen aus A und PW ergibt false. |
Re: ASM - PChars vergleichen
Zitat:
|
Re: ASM - PChars vergleichen
Zitat:
False = $00, True <> $00 Und nur so, kann man ordentlich arbeiten. Es gibt genug Dinge in der VCL die nicht eine $01 bei True zurück geben! Siehe auch die ständigen Hinweise zum = True Vergleich in If Abfragen. |
Re: ASM - PChars vergleichen
Dann müsste Delphi aber doch bei sowas wie "not a" das ganze direkt in "not a" als Maschinencode umsetzen und nicht "xor a, 1" :gruebel: Wo käm man da hin, wenn "(not true) <> false" :mrgreen:
|
Re: ASM - PChars vergleichen
Delphi-Quellcode:
Die Zeile versteh ich von der Syntax her irgendwie nicht ganz...
sete al // setzt result dann=1 (true), wenn ZF=1 ist
Sete heißt doch bestimmt "Set if Equal" oder? AL ist ein register... aber was hat AL mit ZF zu tun (ZF = Undefinierter Bezeichner) und warum setzt es al auf 1 wenn ZF=1 ist... wo in dieser Zeile erkennt man
Delphi-Quellcode:
?
if ZF=1 then
... AL ist ja der Register um Booleans zurückzugeben, bzw um Booleans zu schreiben zu lesen weil SizeOf(Boolean) = 1 = AL ne ? Gruß Neutral General |
Re: ASM - PChars vergleichen
Zitat:
|
Re: ASM - PChars vergleichen
cmp subtrahiert die beiden Operanden.
Sinnvollerweise wird dann das Sign- und Zero-Flag gesetzt bzw. nicht gesetzt. Dann entsprechen folgende Operatoren folgenden Flags: <: SF=1 <=: SF=1 oder ZF=1 =: ZF=1 >=: SF=0 >: SF=0 und ZF=0 <>: ZF=0 |
Re: ASM - PChars vergleichen
ahhh :idea: :mrgreen:
Ok ich glaube ich habs verstanden. Nur noch eine Frage: SF = ? :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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