Autor Beitrag
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Fr 21.03.08 13:25 
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
ausblenden Delphi-Quelltext
1:
SHR EDX, ECX					

mache, geht meckert Delphi rum.

Wenn ich dagegen
ausblenden Delphi-Quelltext
1:
SHR EDX, 16					

mache, funktioniert es.

Wenn ich es Delphi überlasse, nutzt er cl.:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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 ;) )