Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: scales of justice am 29. March 2006, 14:34

Titel: mit sub auf 0 setzen schneller?
Beitrag 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
Titel: mit sub auf 0 setzen schneller?
Beitrag von: Osbios am 29. March 2006, 16:10
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)
Titel: mit sub auf 0 setzen schneller?
Beitrag von: bitmaster am 29. March 2006, 21:43
sind sowieso nur 0,00000000000000000000000000001 sekunden schneller (oder auch nicht)

habe ich ein paar Nullen vergessen? ;)


bitmaster
Titel: mit sub auf 0 setzen schneller?
Beitrag von: scales of justice am 30. March 2006, 11:55
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