Page 1 sur 1

Tuto Unity

Posté : 21 févr. 2025, 21:18
par itasoft
Slts,
J’ai pas trouvé de fonction pour faire un décalage logique de 10 bits à droite de tous les bits d’un tableau de 4 mots, je me la suis paluché à la mano, pour info exemple ci dessous.
---------clic zoom---------
01.JPG
---------décalage logique de 10 bits à gauche -----------
03.JPG

Re: Tuto Unity

Posté : 22 févr. 2025, 19:39
par DurandO
Bonjour,
sans bien connaitre Unity, je fais trop de Siemens (on choisi pas toujours),
si tu définis deux variables une qui pointe sur l'adresse %M100 l'autre sur l'adresse 100-10 une simple copie de tableau et c'est réglé non.

Re: Tuto Unity

Posté : 22 févr. 2025, 21:54
par itasoft
j'ai 4 mots de 16 bits soit 64 bits, on veut décaler tous ces 64 bits de 10 bits à droite: exemple
%MW100:=16#FFFF
%MW101:=16#FFFF
%MW102:=16#FFFF
%MW103:=16#FFFF
Après le écalage de 10 à droite
%MW100:=16#FFFF
%MW101:=16#FFFF
%MW102:=16#FFFF
%MW103:=16#003F

Après le écalage de 10 à gauche
%MW100:=16#FC00
%MW101:=16#FFFF
%MW102:=16#FFFF
%MW103:=16#FFFF

Re: Tuto Unity

Posté : 23 févr. 2025, 12:37
par DurandO
itasoft a écrit : 22 févr. 2025, 21:54 j'ai 4 mots de 16 bits soit 64 bits, on veut décaler tous ces 64 bits de 10 bits à droite: exemple
Ou comme ceci :

Code : Tout sélectionner

%MW100 := SHL (%MW100,10) + SHR(%MW101,6);
%MW101 := SHL (%MW101,10) + SHR(%MW102,6);
%MW102 := SHL (%MW102,10) + SHR(%MW103,6);
%MW103 := SHL (%MW103,10) + 0;


Re: Tuto Unity

Posté : 23 févr. 2025, 13:31
par itasoft
c'est pas bon, mais on ne doit pas se comprendre, lol
-------
Faire un décalage à droite de tous les bits ça revient à éjecter les 10 premiers bits de la chaine de 64 bits
De ce fait on doit avoir les 10 derniers bits de la chaine de 64 bits à zéro, soit %MW103 :=16#003F

000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Re: Tuto Unity

Posté : 23 févr. 2025, 14:45
par DurandO
Décalage à gauche

Code : Tout sélectionner

%MW100 := SHL (%MW100,10) + SHR(%MW101,6);
%MW101 := SHL (%MW101,10) + SHR(%MW102,6);
%MW102 := SHL (%MW102,10) + SHR(%MW103,6);
%MW103 := SHL (%MW103,10) + 0;
Si %MW103 était égale à FFFF après décalage il vaut en binaire 1111 1100 0000 0000 soit en hexa FC00

Décalage à droite :

Code : Tout sélectionner

%MW103 := SHR (%MW103,10) + SHL(%MW102,6);
%MW102 := SHR (%MW102,10) + SHL(%MW101,6);
%MW101 := SHR (%MW101,10) + SHL(%MW100,6);
%MW100 := SHR (%MW100,10) ;
Si %MW100 était égale à FFFF après décalage il vaut en binaire 0000 0000 0011 1111 soit en hexa 003F

Ou bien on ne se comprend pas en effet.

Re: Tuto Unity

Posté : 23 févr. 2025, 14:51
par itasoft
oui on ne se comprends pas, on laisse tomber, lol
il faut raisonner sur les 64 bits et non pas mot à mot
ps:
ya pas de mot de 64 bits sur UNITY (dommage) sinon ça reviendrait à faire un décalage logique à droite de 10 du mot de 64 bits
résultat
000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111
ps
Que celui qui a tout compris, léve le doigt , LOL

Re: Tuto Unity

Posté : 23 févr. 2025, 15:54
par DurandO
Tu as bien dis que tu cherchais à réaliser un décalage de 10 bits dans un tableau de 4 mots soit 64 bits.
Moi je comprends ceci :
Capture d’écran du 2025-02-23 15-55-03.png
Voici ce que je t'ai proposé pour le décalage à gauche

Code : Tout sélectionner

%MW100 := SHL (%MW100,10) + SHR(%MW101,6);
%MW101 := SHL (%MW101,10) + SHR(%MW102,6);
%MW102 := SHL (%MW102,10) + SHR(%MW103,6);
%MW103 := SHL (%MW103,10) + 0;
Voici le résultat :
Capture d’écran du 2025-02-23 15-51-19.png
Je ne vois pas en quoi ce n'est pas bon.
Je laisse tomber.

Re: Tuto Unity

Posté : 23 févr. 2025, 16:00
par itasoft
Si tu prends un mot de 64 bits et fais un décalage à droite de 10 tu obtiens bien ça:
0000000000111111_1111111111111111_1111111111111111_1111111111111111
----- %MW103--------------- %MW102-------------- %MW101----------- %MW100 (poids faibles)

(*Résultat à obtenir Pour un décalage à GAUCHE de 10 *)
%MW100=16#FC00
%MW101=16#FFFF
%MW102=16#FFFF
%MW103=16#FFFF
(*Résultat à obtenir Pour un décalage à DROITE de 10 *)
%MW100=16#FFFF
%MW101=16#FFFF
%MW102=16#FFFF
%MW103=16#003F

OK, compris c'est bon, c'est parceque on ne mettait pas les poids faibles / poids forts dans le même ordre
toi: W100-W101-W102-W103
moi: W103-W102-W101-W100
car, c'est une valeur codée sur 64 bits et reçue dans 4 mots via une requete READ_VAR donc les poids faible sont sur le premier mot

(*Corrigé Décalage à GAUCHE de 10 *)
%MW103 := SHL (%MW103,10) + SHR(%MW102,6);
%MW102 := SHL (%MW102,10) + SHR(%MW101,6);
%MW101 := SHL (%MW101,10) + SHR(%MW100,6);
%MW100 := SHL (%MW100,10) ;(*%MW100=16#FC00*)

(*Corrigé Décalage à DROITE de 10 *)
%MW100 := SHR (%MW100,10) + SHL(%MW101,6);
%MW101 := SHR (%MW101,10) + SHL(%MW102,6);
%MW102 := SHR (%MW102,10) + SHL(%MW103,6);
%MW103 := SHR (%MW103,10); (*W103=16#003F*)

Re: Tuto Unity

Posté : 24 févr. 2025, 07:24
par itasoft
En conclusion, tu n'avais pas completement tort, lol