REP bei CX=0
Von: Markus Wichmann (nullplan@gmx.net) [Profil]
Datum: 28.09.2009 09:11
Message-ID: <e546p6-3j3.ln1@www.wichi.de.vu>
Newsgroup: de.comp.lang.assembler
Datum: 28.09.2009 09:11
Message-ID: <e546p6-3j3.ln1@www.wichi.de.vu>
Newsgroup: de.comp.lang.assembler
Hi all, ich schreibe gerade die C Standard Lib in Assembler nach. Dabei kam ich auch zu memcpy und memmove. Ich dachte mir, dass der Prozessor vielleicht nicht nur Bytes durch die Gegend schieben will, und entrollte die Schleife etwas: ;ecx - Anzahl zu kopierender Bytes ;esi - Quelle ;edi - Ziel mov edx, ecx shr ecx, 2 and edx, 3 rep movsd mov ecx, edx rep movsb Nun ist es ja allerdings möglich, dass die Anzahl zu kopierender Bytes durch 4 teilbar ist, sodass edx=0, d.h. schon zu Beginn von "rep movsb" ist ecx=0. Dummerweise steht in meiner Doku zum Prozessor (x86) nicht drin, ob "rep" eine anfangs- oder endgeprüfte Schleife ist, sprich: Wird bei einer Instruktion mit rep-Präfix erst ecx dekrementiert und dann geprüft, wie hoch es ist oder andresrum? BTW: Ich bräuchte noch eine Aufstellung der Register, die laut x86-Linux-ABI von der aufgerufenen Funktion gesichert werden müssen. Tschö, Markus -- Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot pausieren... Bully hats ja auch geschafft. -- gUnter nanonüm in de.alt.anime[ Auf dieses Posting antworten ]
Antworten
- Dirk Wolfgang Glomp (28.09.2009 10:20)
- . (28.09.2009 23:00)
- Markus Wichmann (29.09.2009 20:35)
- . (30.09.2009 22:54)
- Markus Wichmann (01.10.2009 19:19)
- . (02.10.2009 03:40)
- Markus Wichmann (02.10.2009 12:41)
- Hubert Seidel (02.10.2009 20:06)
- Dirk Wolfgang Glomp (01.10.2009 09:09)
- Markus Wichmann (01.10.2009 17:52)
- Dirk Wolfgang Glomp (02.10.2009 07:38)
