Seite 1 von 1

Was soll "AND ebx,ebx" bewirken?

Verfasst: 03.04.2009 02:02
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? :?

Verfasst: 03.04.2009 02:16
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... @_@

Verfasst: 03.04.2009 02:30
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

Verfasst: 03.04.2009 08:16
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

Verfasst: 03.04.2009 10:04
von Deeem2031
Desswegen sind die Befehle danach wichtig, falls die Befehle danach das FlagRegister ignorieren/überschreiben ist der Befehl sinnlos, andernfalls nicht.

Verfasst: 03.04.2009 13:39
von Kaeru Gaman
AH :shock:

... ich brauch wirklich mal ne liste, welche befehle welche flags beeinflussen.

Verfasst: 04.04.2009 21:20
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]

Verfasst: 06.04.2009 08:51
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