Documentation d'un code assembleur pas claire

Résolu/Fermé
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - Modifié le 11 mars 2023 à 12:47
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 11 mars 2023 à 17:51

Bonjour,

Je me suis intéressé récemment à l'ordinapoche, qui était un ordinateur en carton faisant partie

d'un numéro hors série d'un magazine scientifique (voir internet pour les détails)

Il connaissait une dizaine d'instructions élémentaires et permettait de montrer le fonctionnement

d'un ordinateur

Pour m'amuser un peu, j'ai consulté la doc dans le but d'émuler tout ça en Python

Tout est clair, sauf l'instruction shift (SHT), je ne comprends vraiment pas ce que l'on entend précisément

par " décalage d’une unité vers la gauche puis vers la droite", il y a un exemple numérique

mais qui ne clarifie pas vraiment tout ça. (faut-il convertir d'abord en binaire ? ...)

Si quelqu'un a l'esprit plus vif que le mien (ou bien a connu l'objet à l'époque), je vous donne l'extrait de la doc:

SHT    SHifT    décalage à gauche (du 1er chiffre) puis à droite
(du 2nd chiffre) du contenu de l’ACC


instruction de décalage d’une unité vers la gauche puis vers la droite
du nombre contenu dans le registre accumulateur, avec entrée de zéro à
droite puis à gauche. Le but est d’obtenir très rapidement la multiplication
et/ou la division par 10 (ou par 16 en hexadécimal) du nombre contenu dans l’ACC.
Aucune étape particulière, si ce n’est la positionnement du bus d’adresse à
l’adresse correspondant au registre ACC.
Exemple : SHT 12 (codée 612) du nombre 12 donne comme résultat 002 soit 2.

Merci d'avance pour vos réponses


Windows / Edge 110.0.1587.69

A voir également:

4 réponses

baladur13 Messages postés 46939 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 25 novembre 2024 13 455
Modifié le 11 mars 2023 à 13:47

Bonjour,

Selon moi il faut comprendre ceci :

Le code  de SHT étant 612 , c'est ce qui apparait dans le registre accumulateur (ACC).

Un décalage à gauche fait donc disparaitre le 6 ==> ACC passe à 012

2 décalage à droite  fait disparaitre le 01 ===> ACC devient 002


0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
11 mars 2023 à 14:03

Bonjour Baladur,

Excuse-moi, je n'ai pas tout dit:

6, c'est le code de l'instruction (SHT)

et 12 serait donc les valeurs de décalage (1 vers la gauche, et 2 vers la droite)

Et, d'après l'exemple, 12 est dans l'accumulateur et on le décale de 1 puis 2, et ça doit donner 2

Bizarre

0

L'instruction SHT se code 06lr où l est le décalage vers la gauche et r est le décalage vers la droite. C'est une façon de combiner deux instructions.
Je suppose qu'on décale d'abord vers la gauche, puis vers la droite.
Si on veut décaler dans un seul sens, on met l'autre valeur à 0.

Le texte qui suit semble me contredire:

SHT
instruction de décalage d’une unité vers la gauche puis vers la droite du nombre contenu dans le registre accumulateur, avec entrée de zéro à droite puis
à gauche. Le but est d’obtenir très rapidement la multiplication et/ou la division par 10 (ou par 16 en hexadécimal) du nombre contenu dans l’ACC. Aucune
étape particulière, si ce n’est la positionnement du bus d’adresse à l’adresse correspondant au registre ACC. Exemple : SHT 12 (codée 612) du nombre 12
donne comme résultat 002 soit 2.

Quel est la grandeur supposée de l'accumulateur? Ça semble 3 chiffres hexadécimal.

Peut-être qu'on décale en hexa, et non en binaire.

La confusion vient du mauvais choix de l'exemple:

lecode est 0612 et acc = 0012, pas très brillant.

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 11 mars 2023 à 17:53

Bonjour Pierrot,

Pas très brillant, en effet

De plus, les 2 textes se contredisent:

"décalage à gauche (du 1er chiffre) puis à droite (du 2nd chiffre)" : donc de 1 puis 2

et :

"décalage d’une unité vers la gauche puis vers la droite" : donc on décale de 1 tout le temps

L'idéal serait de récupérer un exemplaire du magazine: il y avait des petits programmes à exécuter

donc peut être un contenant un exemple concret de cette instruction

J'ai codé la machine en Python, mais quand je teste si code = SHT, je passe, pour le moment

    elif(op_code == 'SHT'):
        pass
0