AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ASM - PChars vergleichen

Ein Thema von Neutral General · begonnen am 7. Okt 2006 · letzter Beitrag vom 8. Okt 2006
Antwort Antwort
Seite 3 von 3     123   
Balu der Bär
(Gast)

n/a Beiträge
 
#21

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 11:38
Sign-Flag.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#22

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 11:48
is zwar nicht fertig und noch lange nicht perfekt, aber etwas kann man dennoch erkennen ._.
Miniaturansicht angehängter Grafiken
inlineasm_204.gif  
Angehängte Dateien
Dateityp: txt inlineasm_271.txt (77,2 KB, 13x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#23

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 15:20
Zitat von Muetze1:
Zitat von Amateurprofi:
Zitat von 3_of_8:
Ein Boolean ist nichts anderes als ein Byte. Nur dass er normalerweise nur $00 oder $FF enthält.
Nein, $00 für False, $01 für True.
Sollte und nicht ist!

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.
Thomas,
das kann schon sein daß Funktionen bei unsauberer Programmierung für True etwas anderes als $01 zurückgeben,
aber das war hier nicht gefragt.
Die Frage war, was ein Boolean Wert ist, und unter Delphi ist für Boolean-Werte definiert 0=False und 1=True.
Die Tatsache, daß intern bei der Prüfung auf 0 geprüft wird und alles, was nicht 0 ist als True erkannt wird ändert nichts an dieser Definition. Es ist ja z.B. auch klar, daß 2 * 2 = 4 ist, und wenn jemand eine Multiplikations-Funktion so programmiert hat, daß sie für 2 * 2 als Resulttat 27 zurückgibt, dann ändert das auch nichts daran, daß 2 * 2 = 4 ist und bleibt.
Außerdem, wenn schon von unsauberer Programmierung die Rede ist : Es ist ja nicht ausgeschlossen, daß jemand eine Routine schreibt, in der er prüft ob ein als Boolean definierter Wert = 1 ist, und dann alles, was nicht 1 ist, als False interpretiert und dann ist Deine Aussage "und nur so kann man ordentlich arbeiten" nicht viel wert.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#24

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 15:38
Zitat von Balu der Bär:
Zitat von Neutral General:
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...
Set if equal ist richtig. Mit ZF ist wohl das Zero-Flag gemeint.
Ja, das ist gemeint.
Und die Benennung ZF ist nicht meine Erfindung sondern das Zero-Flag wird nun mal mit ZF bezeichnet.

@NeutralGeneral
Zitat:
Die Zeile versteh ich von der Syntax her irgendwie nicht ganz...
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
sete al setzt al=1, wenn ZF=1 ist und setzt al=0 wenn ZF=0 ist.

hier ein Auszug aus Intel's Instruction Set Reference.
kann man bei Intel als PDF-File (ca. 7.6 MB) downloaden. (einfach zu suchen aber sehr schwer zu finden)

SETcc—Set Byte on Condition
Description
Set the destination operand to 0 or 1 depending on the settings of the status flags (CF, SF, OF,
ZF, and PF) in the EFLAGS register. The destination operand points to a byte register or a byte
in memory. The condition code suffix (cc) indicates the condition being tested for.
The terms “above” and “below” are associated with the CF flag and refer to the relationship
between two unsigned integer values. The terms “greater” and “less” are associated with the SF
and OF flags and refer to the relationship between two signed integer values.
Opcode Instruction Description
0F 97 SETA r/m8 Set byte if above (CF=0 and ZF=0)
0F 93 SETAE r/m8 Set byte if above or equal (CF=0)
0F 92 SETB r/m8 Set byte if below (CF=1)
0F 96 SETBE r/m8 Set byte if below or equal (CF=1 or ZF=1)
0F 92 SETC r/m8 Set if carry (CF=1)
0F 94 SETE r/m8 Set byte if equal (ZF=1)
0F 9F SETG r/m8 Set byte if greater (ZF=0 and SF=OF)
0F 9D SETGE r/m8 Set byte if greater or equal (SF=OF)
0F 9C SETL r/m8 Set byte if less (SF<>OF)
0F 9E SETLE r/m8 Set byte if less or equal (ZF=1 or SF<>OF)
0F 96 SETNA r/m8 Set byte if not above (CF=1 or ZF=1)
0F 92 SETNAE r/m8 Set byte if not above or equal (CF=1)
0F 93 SETNB r/m8 Set byte if not below (CF=0)
0F 97 SETNBE r/m8 Set byte if not below or equal (CF=0 and ZF=0)
0F 93 SETNC r/m8 Set byte if not carry (CF=0)
0F 95 SETNE r/m8 Set byte if not equal (ZF=0)
0F 9E SETNG r/m8 Set byte if not greater (ZF=1 or SF<>OF)
0F 9C SETNGE r/m8 Set if not greater or equal (SF<>OF)
0F 9D SETNL r/m8 Set byte if not less (SF=OF)
0F 9F SETNLE r/m8 Set byte if not less or equal (ZF=0 and SF=OF)
0F 91 SETNO r/m8 Set byte if not overflow (OF=0)
0F 9B SETNP r/m8 Set byte if not parity (PF=0)
0F 99 SETNS r/m8 Set byte if not sign (SF=0)
0F 95 SETNZ r/m8 Set byte if not zero (ZF=0)
0F 90 SETO r/m8 Set byte if overflow (OF=1)
0F 9A SETP r/m8 Set byte if parity (PF=1)
0F 9A SETPE r/m8 Set byte if parity even (PF=1)
0F 9B SETPO r/m8 Set byte if parity odd (PF=0)
0F 98 SETS r/m8 Set byte if sign (SF=1)
0F 94 SETZ r/m8 Set byte if zero (ZF=1)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#25

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 16:11
Nachtrag zu vorherigem Beitrag.

Hier können Interessierte die Intel Manual downloaden.

Intel Specs
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#26

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 17:03
Nochmal zu den boolischen Typen:

oben die Konstanten
und unten die Auswertung

Code:
Definition - Boolean:
True = $01
False = $00

<>$00 - True
 =$00 - False



Definition - ByteBool:
True = $FF
False = $00

<>$00 - True
 =$00 - False



Definition - LongBool:
True = $FFFFFFFF
False = $00000000

<>0 - True
 =0 - False
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#27

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 18:31
Zitat von Amateurprofi:
das kann schon sein daß Funktionen bei unsauberer Programmierung für True etwas anderes als $01 zurückgeben,
aber das war hier nicht gefragt.
Nun gut, dann haben wir also festgestellt, dass Borland selber unsauber programmiert nach deiner Ansicht. Das Problem auf das ich hinweisen wollte ist, dass er dieses nicht so starr lernen sollte, schliesslich gibt es VCL Routinen welche bei True nicht 1 zurück geben. Und wenn er jetzt nur den "sauberen" Weg von dir lernt und immer fest dahingehend programmiert, dann kann er damit später auch Probleme bekommen. Pauschal zu sagen $01 ist true und wenn nicht ist es schlecht programmiert ist eine schlechte Lösung.

Er wurde ja nun darauf hingewiesen und gut ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#28

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 19:35
Und wenn man sich das MSDN/PSDK durchließt, dann heißt es oftmal "wenn Result ungleich 0" und "Result = 0".
Und nich "Result = 1", wenn der Typ BOOL/LongBool ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#29

Re: ASM - PChars vergleichen

  Alt 8. Okt 2006, 22:51
@Muetze1,

Irgendwie habe ich das Gefühl, Du willst mich nicht verstehen.

Die Diskussion (oder sollte ich schreiben 'die Debatte'?) begann mit einem Beitrag 3_Of_8s in dem er schrieb
Zitat:
Ein Boolean ist nichts anderes als ein Byte. Nur dass er normalerweise nur $00 oder $FF enthält.
und das hatte ich kommentiert mit
Zitat:
Nein, $00 für False, $01 für True.
Mit keiner Silbe, weder von 3_Of_8 noch von mir, wurde auch nur ansatzweise erwähnt, man müsse einen Boolean daraufhin prüfen, ob er = 1 ist. Es wurde auch nicht über ByteBool, WordBool oder LongBool geschrieben, sondern ausschließlich darüber, welche Werte eine BOOLEAN-Variable NORMALERWEISE enthält. 3_Of_8 schrieb "normalerweise nur $00 oder $FF, und nur das "oder $FF" wurde von mir kommentiert.

Nun, spätestens nach himitsus Beitrag wissen wir, wie ein Boolean definiert ist
Zitat:
Definition - Boolean:
True = $01
False = $00
Und, Muetze1, was das lernen betrifft :
Ich will niemanden lehren, wie etwas gemacht wird. Jedoch, wenn es so wäre, dann hielte ich es für besser, zu lehren, daß man (es geht hier um Funktionen die in Assembler geschrieben sind) für False den Wert $00 und für True $01 (und nicht irgendeinen Wert der <> 0 ist) zurückgeben sollte.

Um die geschätzten anderen User nicht weiter mit dieser sinnlosen Debatte einzubringenanderdurch durcheinanderzubringen, und weil es inzwischen offtopic wird, sollten wir es jetzt dabei belassen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz