Hello,
Das ganze würde natürlich mit Modulo gehen aber der steht nicht zur Verfügung.
Wir suchen also ein z = x mod y
An schnellen Befehlen, die in Frage kommen, stehen zur Verfügung:
- die vier Grundrechenarten
Integer?
z = x - ((x / y) * y)
Man weiß ja nicht, wei es umgesetzt wir und auf welchem Prozessor.
Aber ich gehe mal davon aus, dass es kein Mathematischer Coprozessor ist, sondern irgendeine eine Single-Chip-Gurke.
Da wären DIV und MUL auf jeden Fall sehr teure Statements.
Als Beispiel beim Beim 8086
DIV 3+9+16+4+4+4+17 = 57 (zuzügl. 2*EA) genau nachvollziehbar
MUL 77+133+83+139 = 432 (zuzügl. 2*EA) Maximalwert
SUB 90+162+168 = 420 (zuzügl. 2*EA)
Das muss man sich also sehr genau überlegen, ob man nicht lieber eine Abbildung von "repnz" oder so ähnlich benutzt. Das ist bei den hardwarenahen Hochsprachen i.d.R. in For-Schleifen umgesetzt.
Wenn es sich um sogenannte "dedizierte For-Schleifen" handelt, in denen man den Schleifenzähler wärend der Abarbeitung nicht mehr verändrn darf, sind die extrem schnell.
Das kann man aber eben nicht beantworten, ohne den Assempler-Code Deiner Hochsprache zu haben und ohne den Prozessortyp genauer zu kennen.
Wenn es um das Ausknautschen von Taktzyklen geht, wird ja wohl Portierbarkeit eher keine Rolle spielen
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)