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
mache, geht meckert Delphi rum.
Wenn ich dagegen
mache, funktioniert es.
Wenn ich es Delphi überlasse, nutzt er cl.:
Delphi-Quelltext
1: 2: 3:
| mov ebx, ecx mov ecx, ebx 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 ;) )
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!