PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist schneller: > 0 oder != 0


SentinelBorg
2009-08-03, 17:35:53
Eine Frage die sich mir beim Programmieren immer wieder stellt, auch wenn sie heutzutage wohl total unsinnig ist. :D Aber vielleicht weiss ein x86 Assembler Profi die Antwort. Also, beim Prüfen von einem 32 Bit signed Integer Wert, was ist schneller, if(x > 0) ODER if(x != 0)? Ich würde ja mal auf "!=" tippen.

Coda
2009-08-03, 17:41:03
Beides gleich. Ist sogar die gleiche Instruction, nur der Sprung danach ist entweder "jne" oder "jg".

RattuS
2009-08-03, 17:44:03
Beides gleich.
Begründung: Weil es für alle Vergleiche entsprechende Sprünge gibt. In deinem Falle: jg 0 (> 0) und jne 0 bzw. jnz (!= 0).

robobimbo
2009-08-03, 18:12:29
Begründung 2: und weil sich diese bedingungen alle über die prozessor status flags ableiten lassen

Gast
2009-08-03, 22:45:23
Begründung 3: Die eigentliche Vergleichsoperation ist eine Differenzbildung. Wenn das Ergebnis gleich 0 ist, sind die Werte gleich. Sonst gibt das Vorzeichen Auskunft welcher größer war.

In Hardware ist eine Abfrage auf Gleichheit oder Ungleichheit um Welten weniger aufwändig als ein größer/kleiner Vergleich. Da der Subtrahierer aber sowieso da ist kann man ihn auch verwenden.

Der_Donnervogel
2009-08-03, 23:09:53
Begründung: Weil es für alle Vergleiche entsprechende Sprünge gibt. In deinem Falle: jg 0 (> 0) und jne 0 bzw. jnz (!= 0).Das alleine wäre aber noch keine Begründung. Das gilt nur unter der impliziten Annahme dass die Ausführungszeit aller dieser Befehle gleich lange dauert, aber das war ja genau die Frage. ;)

RattuS
2009-08-04, 02:36:10
Das alleine wäre aber noch keine Begründung. Das gilt nur unter der impliziten Annahme dass die Ausführungszeit aller dieser Befehle gleich lange dauert, aber das war ja genau die Frage. ;)
Da alle bedingten Sprünge jeweils die Status Flags auswerten, selbstverständlich. :P

Gast
2009-08-04, 09:12:33
!x ist schneller.