Partagez votre expérience de PureBasic avec les autres utilisateurs.
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » ven. 26/août/2005 13:34
je sais pas faire plus simple
Code : Tout sélectionner
Procedure ROL(Value.l, Offset.l)
Offset % 32
If Offset < 0
Offset + 32
EndIf
While Offset > 0
ROL Value, 1
Offset - 1
Wend
ProcedureReturn Value
EndProcedure
Procedure ROR(Value.l, Offset.l)
Offset % 32
If Offset < 0
Offset + 32
EndIf
While Offset > 0
ROR Value, 1
Offset - 1
Wend
ProcedureReturn Value
EndProcedure
a = $0FF00000
Debug "$"+RSet(Hex(a), 8, "0")
Debug "$"+RSet(Hex(ROR(a, 8)), 8, "0")
Debug "$"+RSet(Hex(ROL(a, 8)), 8, "0")
Debug "---"
Debug "$"+RSet(Hex(ROR(a, 32)), 8, "0")
Dri
fweil
Messages : 505 Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :
Message
par fweil » ven. 26/août/2005 14:43
Peux-tu essayer ça : ?
Code : Tout sélectionner
Procedure ROL(Value.l, Offset.b)
! MOV eax, dword [esp]
! MOV cl, byte [esp+4]
! ROL eax, cl
ProcedureReturn
EndProcedure
Procedure ROR(Value.l, Offset.b)
! MOV eax, dword [esp]
! MOV cl, byte [esp+4]
! ROR eax, cl
ProcedureReturn
EndProcedure
Je pense que c'est correct et optimisé. L'argument 2 doit être une constante (valeur fixe) ou une variable .b
Le registre cl est utilisé et seul autorisé pour ce type de commande.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » ven. 26/août/2005 16:29
ah bah je le connaissais pas ce registre ^^
ca simplifie pas mal les choses c'est sûr
Dri