LC3 Assemblée bit à Bit Décalage à Droite
Ce que j'ai besoin de le faire mettre en œuvre une opération de bits de décalage vers la gauche, et un bit à bit décalage à droite à l'aide de LC-3 Assemblée. Fondamentalement, chaque bit doit être déplacé sur un espace dans le sens du déplacement, et un zéro remplit l'espace vide créé.
Exemples:
Décalage À Droite:
01001001
00100100→
Décalage À Gauche:
01001001
←10010010
J'ai mis en œuvre avec succès un décalage à gauche, en prenant la chaîne binaire, et les ajouter à lui-même.
Je suis perplexe sur la façon d'effectuer un décalage à droite. Toutes les pensées seraient grandement appréciés. J'ai ET, NON, les opérations d'AJOUT, de mouvement de données d'opérations, sept registres pour stocker des valeurs et de l'ensemble de la gamme de la mémoire. J'ai juste besoin de quelques idées de base comment il pourrait être mis en œuvre.
Si vous avez besoin d'un LC-3 du Jeu d'Instructions de référence, il est ici.
OriginalL'auteur Will Haynes | 2012-04-09
Vous devez vous connecter pour publier un commentaire.
Supposons que vous configurez
R2
de sorte qu'il a suffit d'un seul bit. Alors, si vous faites uneAND
avec un autre registre et de la direction générale desZ
condition, à tester si ce bit est défini. Si elle l'est, vous voulez définir le bit précédent dans votre "raison" s'inscrire.Si vous passer ensuite votre seul bit de registre sur un endroit et à répéter en boucle, vous devriez avoir ce dont vous avez besoin.
(Toutes mes excuses si c'est vague; car c'est sans doute devoirs j'essaie d'éviter de simplement vous donner la réponse)
Edit:
Donc, supposons que votre entrée est 01001011. Vous commencez avec une sortie de 00000000, un masque de saisie de 00000010, et un masque de sortie de 00000001. Vous ne le ET et vous trouvez qu'il est différent de zéro, alors vous ajoutez votre masque de sortie à la sortie. Ensuite vous changer les deux masques à obtenir 00000100 et 00000010.
Sur le prochain passage dans la boucle, ET est égale à zéro, de sorte que vous n'ajoutent rien, et ainsi de suite. La boucle se termine lors du changement de masque en fait zéro.
Ce n'est pas exactement "force brute", c'est juste 9 lignes de code, y compris le programme d'installation.
OriginalL'auteur Russell Zahniser
Wow, c'est tout à fait un peu d'instruction set.
Si vous disposez de 256 octets de mémoire disponible, une table de recherche pourrait être le chemin à parcourir.
Vous pourriez le faire sans mémoire de données à l'aide d'une boucle sur chaque position de bit, à l'aide de
AND
pour extraire les bits.OriginalL'auteur Oliver Charlesworth
Vous avez besoin de deux masques. Deux d'entre eux sont d'un seul "1" avec le reste de "0". Les deux sont initialisées à 0000 0000 0000 0001, mais l'un d'eux est gauche décalée d'un montant que vous souhaitez que le numéro d'origine pour être décalés vers la droite. Nous allons appeler cette Mask1. L'onu a changé de numéro de Mask2.
Comparer Mask1 avec le numéro d'origine. Si (Mask1 "et" input) > ou < 0", ou" Mask2 avec sortie et décalage vers la gauche des deux Masques.
Dans les deux cas, le décalage vers la gauche des deux Masques et essayez à nouveau jusqu'à ce qu'il n'y a pas plus de bits dans l'entrée de test.
LC-3 ne dispose pas d'un bit à bit "ou". Vous aurez à "pas" les deux opérandes, "et", puis "pas" le résultat d'un bit à bit "ou".
La raison pour laquelle vous tester si oui ou non Mask1 "et" input > ou < 0 est parce que si elle est égale à zéro, nous voulons ne rien faire. Si le résultat de "et"ing ces opérandes est > 0, alors cela signifie que la position testé trouvé un "1" et il doit être imprimé sur le résultat. Si le masque a été gauche décalée pour devenir 1000 0000 0000 0000, ce qui est techniquement un nombre négatif. Le "et" de qui et de n'importe quel nombre avec un "1" dans cette position sera également un nombre négatif.
add
au lieu deor
si vous le savez il n'y a pas de report. C'est le cas ici parce que vous travaillez un peu à la fois.OriginalL'auteur user3054804
En supposant un 0, vous pouvez simplement diviser par 2, par la soustraction de nouveau et de nouveau.
Donc compter combien de fois vous pouvez AJOUTER RX, RX, #-2
Je suis sûr qu'il est aussi un moyen de contourner l'un des principaux 1.
OriginalL'auteur meüto