optimiert und übersetzt.
Ich weiß, das ich (4==4) auch optimieren könnte (zu 1 bzw. true), aber ich möchte erst die Bedingung in Assembler übersetzen (was hier auch funktioniert).
Habe zwar schon etliche Hefeweizen inner Birne, aber was soll denn das CMP? XOR eax,eax setzt auf jeden Fall das Zero-Flag. Allgemein könnte man es so machen (True=1; False =0):
In deinem Code ist das CMP Muster ohne Wert, denn die Flags, die du zum Sprung mit JNE auswerten willst, werden durch das XOR neu gesetzt. Der Sprung wird nie ausgeführt, du erhälst immer wahr, egal was du vergleichst. Es funktioniert, wenn du XOR EAX,EAX in MOV EAX,1 änderst. Aber: Du hast dann 2x MOV, um die (Boolschen-)Werte zu setzen. Und jetzt kommt´s mit der Geschwindigkeit: Nicht nur die Anzahl der Befehle machts, sondern auch wie lang sein Opcode ist. Lieber einen Befehl mehr, dafür aber kurz und knackig (Stichwort Pipelining). Jeder "MOV Wert"-Befehl ist 5 Bytes lang, XOR EAX,EAX und die Short-Sprünge jeweils 2 Byte und INC EAX ist gar nur 1 Byte lang. Deshalb habe ich SUB verwendet, weil ich so INC und XOR verwenden kann. Übrigens, die Short-Sprünge benötigen auch nur einen Taktzyklus; sind also keineswegs Zeit-Fresser.