Entwickler-Ecke

Algorithmen, Optimierung und Assembler - SHR EDX, ECX geht nicht


Heiko - Fr 21.03.08 13:25
Titel: SHR EDX, ECX geht nicht
Hallo,

ich will momentan eine Zahl, die im Register EDX steht nach rechts shiften, und zwar um soviele Bits wie in ECX steht.

Also im Prinzip i:=i shr shrC;, wobei EDX=i und ECX=shrC.

Wenn ich nun

Delphi-Quelltext
1:
SHR EDX, ECX                    

mache, geht meckert Delphi rum.

Wenn ich dagegen

Delphi-Quelltext
1:
SHR EDX, 16                    

mache, funktioniert es.

Wenn ich es Delphi überlasse, nutzt er cl.:

Delphi-Quelltext
1:
2:
3:
mov ebx, ecx
mov ecx, ebx //irgendwie sinnig
shr ebx, cl


Was mich jetzt wundert: Wo willt cl gefüllt? Welches Register ist es überhaupt? Denn in der Übersicht über die Register & Flags ist das nicht mit aufgelistet *gruebel*


Allesquarks - Fr 21.03.08 13:39

cx sind die unteren 16 bit von ecx (extended cx) und cl ist c-low also das untere Byte im Gegensatz zu ch für c-high.

es akzeptiert nur cl weil es sowieso nur 32 mal schieben kann auf 32 Bit Maschinen und deshalbs würden sogar 5 Bit reichen. In der Tat werden glaube ich die 8 Bit in cl zunächst and verknüpft um sie auf maximal 5 Bit runterzukochen aber das ist Befehlsintern in hardware.


Heiko - Fr 21.03.08 19:02

Ok danke, auf die Idee wäre ich von alleine nicht so schnell bekommen (da es ES etc. gibt, habe ich da cl gesucht ;) )