SINT ou INT vers DINT

Pour les instructions qui convertissent des valeurs SINT ou INT en valeurs DINT, la section Opérandes identifie la méthode de conversion.
Cette méthode de conversion :
convertit les données en plaçant :
Une extension de signe
La valeur du bit le plus à gauche (signe de la valeur) dans chaque position de bit à la gauche des bits existants jusqu'à atteindre 32 bits.
Remplissage avec des zéros
Mise à zéro à la gauche des bits existants jusqu'à atteindre 32 bits.
L'exemple suivant montre les résultats de la conversion d'une valeur en utilisant l'extension de signe et le remplissage avec des zéros.
Cette valeur :
2#1111_1111_1111_1111
(-1)
Convertit cette valeur avec l'extension de signe
2#1111_1111_1111_1111_1111_1111_1111_1111
(-1)
Convertit cette valeur avec le remplissage avec zéro
2#0000_0000_0000_0000_1111_1111_1111_1111
(65535)
Les valeurs immédiates étant toujours remplies avec des zéros, la conversion d’une valeur SINT ou INT peut produire des résultats inattendus. Dans l’exemple suivant, la comparaison est fausse car Source A, une valeur INT, convertit par extension de signe, tandis que Source B, une valeur immédiate, est remplie avec des zéros.
EQU_append_ex1
Si vous utilisez une balise SINT ou INT et une valeur immédiate dans une instruction qui convertit les données par une extension de signe, utilisez l'une de ces méthodes pour traiter les valeurs immédiates.
Spécifier une valeur immédiate dans la base de numérotation décimale
Si vous entrez la valeur dans une base numérique autre que décimale, spécifiez tous les 32 bits de la valeur immédiate. Pour cela, entrez la valeur du bit le plus à gauche dans chaque position de bit à sa gauche jusqu'à atteindre 32 bits.
Créez une étiquette pour chaque opérande et utilisez le même type de données dans toute l'instruction. Pour attribuer une valeur constante, vous pouvez utiliser l'une des méthodes suivantes :
  • Entrez-la dans une des balises.
  • Ajoutez une instruction MOV qui déplace la valeur dans l'une des étiquettes.
Utilisez une instruction MEQ pour vérifier uniquement les bits requis.
Les exemples suivants montrent deux manières de mélanger une valeur immédiate avec étiquette INT. Ces deux exemples, vérifient les bits d'un module d'E/S 1771 pour déterminer si tous les bits sont activés. Comme l'entrée d'un mot de données d'un module d'E/S 1771 est une balise INT, il est plus facile d'utiliser une valeur constante de 16 bits.
Exemple 1
Mélange d'une balise INT avec une valeur immédiate.
Comme remote_rack_1:I.Data[0] est une étiquette INT, la valeur à vérifier par rapport elle est également entrée sous la forme d'une étiquette INT.
EQU_append_ex2
Exemple 2
Mélange d'une balise INT avec une valeur immédiate.
Comme remote_rack_1:I.Data[0] est une étiquette INT, la valeur à vérifier par rapport elle est d'abord déplacée dans int_0, qui est également une étiquette INT. L'instruction EQU compare alors les deux étiquettes.
EQU_append_ex3
Fournir une réponse
Vous avez des questions ou des commentaires sur cette documentation ? Veuillez envoyer vos commentaires ici.
Normal