1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
---------------------------------------------------------------------------
; fonction : StrRev
; Renverse une chaîne de caractères.
;
; [IN] pString : Pointeur vers la chaîne à renverser
;
; [OUT] : EAX = pointeur sur la chaîne renversée.
;
; Registres préservés (en sortie de fonction) : EBP, ESP, ESI, EDI.
; N.B : le DF (Direction flag) est mis à 0.
;
; Exemple :
; .data
; Ma_chaine byte "Ceci est un test",0
;
; .code
; invoke StrRev, addr Ma_Chaine
; ---------------------------------------------------------------------------
StrRev PROC near uses esi edi pString:DWORD
MOV EDI, pString
MOV EDX, EDI
MOV ESI, EDI
XOR EAX, EAX
OR ECX, -1
CLD
REPNE SCASB
CMP ECX, -2
JE @out
DEC EDI
DEC EDI
@reverseLoop:
CMP ESI, EDI
JNB @out
MOV AH, BYTE PTR [ESI]
MOV AL, BYTE PTR [EDI]
MOV BYTE PTR [ESI],AL
MOV BYTE PTR [EDI],AH
INC ESI
DEC EDI
JMP @reverseLoop
@out:
MOV EAX,EDX
ret
StrRev endp |