Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: scales of justice am 29. March 2006, 14:34
-
Hallo,
ein Register setzt man ja normalerweise mit
mov ax, 0000h
auf 0
dann gibt es noch diese Möglichkeit:
xor ax, ax
die schneller ist da sie ein Byte kleiner als die o.g. ist
aber was ist mit dieser:
sub ax, ax
ist die schneller oder langsamer als die 2. o.g.?
ich hab mir mal den Linux Bootsektor angeschaut und die haben sub benutzt
-
Also von der reinen Logik her müsste xor schneller sein. Ich habe mal über Google danach gesucht und bin unter anderem darauf gestoßen:
sub ax,ax
xor bx,bx
sub cx,cx
xor dx,dx
sub di,di
xor si,si
sub bp,bp
Dort wird immer abwechselnd xor und sub benutzt. Die Vermutung liegt nahe, dass es sich um eine Pipelineoptimierung handelt. Die alternative währe :xor ax,ax
mov bx,ax
mov cx,ax
mov dx,ax
mov di,ax
mov si,ax
mov bp,ax
Wobei dann immer AX angesprochen wird. (Schlecht aus der Sicht von Pipelineoptimierung)
-
sind sowieso nur 0,00000000000000000000000000001 sekunden schneller (oder auch nicht)
habe ich ein paar Nullen vergessen? ;)
bitmaster
-
aber das summiert sich ja alles, wenn irgendeine grundlegenede Funktion eines Betriebssystem auch nur ein ganz kleines bisschen schneller ist
und dann aber millionen mal aufgerufen wird, ist das ganze Betriebssystem schon um ein paar Sekunden schneller
und wenn man das dann noch mit mehreren Funktionen macht lohnt sich das richtig
na egal, ich bleib einfach bei xor
Pipeline Optimierung kann ich noch machen wenns drauf an kommt