En fait si A$ = "a"
alors Asc(A$) = 97
donc Bin(Asc(A$) ) = %01100001
Alors, (sachant que les bits d'un octet vont de 0 à 7) s'il nous vient l'idée de sauter le bit 5 à coup de masque ET, ça donne:
Asc(A$) & %11011111 = 65
Et pis, comble du boxon, ben :
Chr(65) = "A"
c.q.f.d. ...
Donc, après cte bref test, passage en instru ASM SSE:
Code : Tout sélectionner
*BufferMAJ = AllocateMemory(32)
For i = 0 To 15 ; on prépare le masque
PokeC(*BufferMAJ + I, %11011111)
Next i
*BufferA = AllocateMemory(32)
*BufferB = AllocateMemory(32)
A$ = InputRequester("", "Ecrivez votre expression :", "")
If Len(a$) > 16: A$ = Left(A$, 16): EndIf
PokeS(*BufferA, A$)
! mov esi, [p_BufferMAJ] ; on charge l'adresse du masque
! movups xmm1, [esi] ; ainsi, on charge le masque
! mov esi, [p_BufferA]; on charge l'adresse de la source
! mov ebx, [p_BufferB]; on charge l'adresse de la cible
! movups xmm0, [esi]; on charge la source
! andps xmm0, xmm1 ; on la filtre avec le masque
! movups [ebx], xmm0 ; on renvoie ça dans la cible
Debug PeekS(*BufferB)