SSE : mise en majuscule
Publié : mar. 14/avr./2009 18:19
				
				Bon, je sais, c'est un peu bourrin mais bon, je montre le principe.
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:
Woilà! Bonne bourre!
			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)