Was soll "AND ebx,ebx" bewirken?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Was soll "AND ebx,ebx" bewirken?

Beitrag von Regenduft »

Hab mal mit dem Compiler und /COMMENTED Switch gespielt.
Hab zwar noch keine Ahnung, aber folgende Zeile erscheint mir absolut sinnlos:

Code: Alles auswählen

AND ebx,ebx
ebx-Register mit sich selbst logisch und-verknüpfen und das Ergebnis im ebx ablegen? Was soll das denn? :o
Da verstehe ich doch sicher etwas grundlegend falsch... aber was? :?
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich kenn das nur mit XOR...
das macht man, um ein register zu leeren, weil es wohl schneller ist als ein MOV....
aber mit AND seh ich da jetzt auch keinen sinn drin... @_@
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag von Regenduft »

Ist das vielleicht ein Bug?

Ich hatte kein Inline ASM o.ä. verwendet. Den Original-Code habe ich leider nichtmehr (war nur so ein Versuch), aber prizipiell war es sowas in der Art:

Code: Alles auswählen

If irgendwas > irgendwas
  Variable / Konstante
endif
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag von Helle »

Code: Alles auswählen

AND ebx,ebx
oder auch

Code: Alles auswählen

OR ebx,ebx
sind eine schnellere Alternative zu

Code: Alles auswählen

CMP ebx,0
, also Test, ob das Register den Wert Null hat oder nicht. Ist der Wert gleich Null, wird das Zero-Flag gesetzt und kann so für bedingte Sprünge genutzt werden:

Code: Alles auswählen

AND ebx,ebx
JZ Ist_Null      ;Springe, wenn ebx Null ist, zu Ist_Null
...
...
Ist_Null:
...
...
Gruß
Helle
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Desswegen sind die Befehle danach wichtig, falls die Befehle danach das FlagRegister ignorieren/überschreiben ist der Befehl sinnlos, andernfalls nicht.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

AH :shock:

... ich brauch wirklich mal ne liste, welche befehle welche flags beeinflussen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Kaeru Gaman hat geschrieben:AH :shock:

... ich brauch wirklich mal ne liste, welche befehle welche flags beeinflussen.
Assembler Ge-Packt
Da steht bei jedem Befehl dabei welche Statusflags er beeinflusst.
Generell hat mir das Buch schon gute Dienste geleistet als Befehlsreferenz.

Aber kann mir mal jemand sagen ob dieser Code was sinnvolles tut? Ist zwar nicht von PB aber von VC++ 7. ^^
Gehe ich richtig in der Annahme das der Code genau garkein Ergebnis liefert oder seh ich das falsch? ^^

Code: Alles auswählen

MOV EBP,ESP
PUSH ECX
MOV DWORD PTR SS:[EBP-4],ECX
MOV ECX,DWORD PTR SS:[EBP-4]
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

AH :shock:

... ich brauch wirklich mal ne liste, welche befehle welche flags beeinflussen.
Lade Dir doch einfach die Assembler-Hilfedatei ins Help-Verzeichnis. Dann kannst Du den Cursor auf einen Assembler-Befehl setzen, F1 drücken und erhälst die Flags direkt im Hilfetext angezeigt. Einfacher geht es eigentlich nicht... :wink:
Eine Anleitung zum Herunterladen und zur Installation der Assembler-Hilfedatei habe ich bereits hier einmal gegeben:
http://www.purebasic.fr/german/viewtopi ... 30&start=7
Antworten