nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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