IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres architectures Assembleur Discussion :

ROR rotate left et machine microprogrammée


Sujet :

Autres architectures Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut ROR rotate left et machine microprogrammée
    Bonjour à tous,

    La commande ROR en assembleur effectue un déclage à droite et récupére le bit qui tombe pouyr l'insérer sur le bit de poids fort.
    par exemple :
    1001->1100->0110->etc

    Comment puis je déterminer avec les opérations booléennes d'une machine microprogrammée si c'est le bit de poids faible est un 1 ou un 0 ?
    si c'est un un il faudra que ajouté 1 sur le bit de poid fort après le décalage à droite et si c'est un 0 je décale à droite et c'est tout.

    quelqu'un peut il m'aider ?
    Merci.
    Gérald

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je pense qu'il y a u forum dédié au langage de programmation Assembleur. Il est fort probable que tu y trouve quelqu'un qui puisse t'aider.

    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    C'est toujours difficile de répondre précisement à une question hors de son contexte et du but global (en tout cas en ASM la stratégie sera complètement différente selon les besoins de l'algo complet).

    En tout cas avec ce que tu donnes et si je comprends bien (pour des nibles)...

    l'instruction ror fait exactement ce que tu veux et il te manque les tests !?

    On and Var 1000 -> traitement approprié

    permet de tester le MSBit (je ne pense pas que ce soit uniquement cela que tu cherches ?)

    or Var 1000 permet de fixer le MSBit sur 1

    and Var 0111 permet de fixer le MSBit sur 0

    je ne pense pas que ce soit ce que tu demandais mais ça précisera ta question...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Salut,
    Je vais te donner un exemple :
    la commande ROL D,4 se traduit de la manière suivante :
    0)phase de fetch que je ne décris pas
    .
    .
    .
    x+1) EARI;AMUX(0);UAL(2);DCAL(0);SCAC;
    la valeur 4 qui se trouve dans le RI (registre d'instruction) passe par le bus A, l'AMUX ne fait pas d'opération dessus, UAL la laisse passer et le DCAL aussi, ensuite on met cette valeur 4 dans AC (accumulateur) via le bus C.
    x+2) EAD;AMUX;UAL(2);COND(1);ADDR(x+5);DCAL(2);SCD;
    x+3) EAAC;AMUX(0);EB(-1);UAL(0);DCAL(0);SCAC;
    x+4) COND(3);ADDR(x+2);
    x+5) EAD;AMUX(0);UAL(2);DCAL(2);SCD;
    x+6) EAD;AMUX(0);EB(+1);UAL(0)DCAL(0);SCD
    x+7) COND(3);ADDR(x+3);

    Avec cette suite de commandes on réalise ROL D,4.

    Je dois faire la même chose avec ROR D,4, sachant que mon système n'effectue pas directement cette opération mais ne sait faire que des opérations binaires basiques (ADD, ET, INV).

    Pour décaler la valeur à droite ce n'est pas trop compliqué mais l'endroit où je bloque c'est :
    - comment déterminer si le bit de poids faible qui tombe est un 0 ou un 1.
    - pour ensuite ajouter 1 sur le bit de poids fort quand c'est le 1 qui tombe.

    Si mes explications ne sont pas suffisantes pour l'exemple ci-dessus, n'hésitez pas et je vous donnerai plus d'infos.

    Voilà.
    Merci.
    Gérald.

  5. #5
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    ok,


    x+0) chargement/init

    x+1) EARI;... SCAC; histoire de me simplifier (et aux lecteurs) la vue
    x+2) EAD;...COND(1);ADDR(x+5);DCAL(2);SCD;
    x+3) EAAC;...EB(-1);...SCAC;
    x+4) COND(3);ADDR(x+2);
    x+5) EAD;...UAL(2);DCAL(2);SCD;
    x+6) EAD;...EB(+1);...;SCD
    x+7) COND(3);ADDR(x+3);

    violent mais correcte ?


    Quid : COND (branch?) EB ? Si tu documentais un peu plus, cela permettrait à tous de comprendre les principes du jeu d'instruction et l'utilisation des bus.


    - Disposes-tu des or/and xor ou not ?

    - Ton INV fait en pratique quelle opération ?

    - Tu peux aussi utiliser les DIV rapides si tu en as ?


    Si oui, (à au moins une des questions) en étant un peu lourdingue (mais tout est relatif...) il doit y avoir moyen de te faire une moulinette booléenne correcte.


    Ceci dit, il serait intéressant de savoir pourquoi tu utilises cette rotation de bits, c'est un test de masques conditionnels, un décodeur de flag, un béret ukrainien à poils ras ? ou simplement un exercice imposé ?


    Il y a peut-être une solution stratégique plus adaptée (j'imagine que tu as largement réfléchi mais bon... histoire de pas périr idiot j'aime bien comprendre le contexte )

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    C'est un exercice imposé

    COND(1);ADDR(x+5)
    signifie : test si mon chiffre est négatif (celà signifie également que le bit de poids frot vaut 1), si ce test est vrai je vais à l'adresse x+5
    sinon je continue, je décale à gauche,etc...

    J'ai 2 bus d'entrée A et B
    J'ai un bus de sortie C
    J'ai les registres suivants CO, AC, PP, RI, RIT,0, +1, -1, AMASQ, UMASQ, A, B, C,D,E,F

    AMUX (0)=> les données viennent du tamponA
    AMUX(1) => les données viennent du RDO


    COND(0) => rien
    COND(1) => test si chiffre négatif si oui saut et N=1
    COND(2) => test si chiffre =0 si oui saut et Z=1
    COND(3) => saut

    UAL(0) => A+B
    UAL(1) => AetB
    UAL(2) => A
    UAL(3)=inv(A) ou A barre (ex inv(1001)=0110)

    DCAL(0) = rien (transparence)
    DCAL(1) = décalage droite
    DCAL(2) = décalage gauche
    DCAL(3) => inutilisé

    j'ai égalisé la mémoire ROd et RAD.

    Mon probleme concerne la transformation du ROR en opération binaire.

    J'aurais bien dessiné le schéma mais non....

    Voilà.
    Merci en tout cas.
    Gérald.




  7. #7
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Ha, sans le schéma c'est limite c'est dingue... comment tu veux faire sans schéma... faut dire qui fait pas d'effort le gus


    Nan, c'est parfait, tout le monde peut comprendre.


    Dans le principe j'aurais tendance à faire :


    - le test sur le LSBit avec un and 0001 UAL(0) et tester si = 0 COND(2)


    - en fonction du résultat brancher (+DCAL(1) dans tous les cas)


    - or 1000 UAL(1) si le test est négatif (<>0)


    - Ne rien faire si le test est positif (=0)

    N'ayant jamais utiliser ce genre de syntaxe, je résumerais en torchis javanais millésimé :


    Si MonRegistre and 0001 ; LSBit = 1


    DCAL(1) ; ROL
    OR MonRegistre 1000 ; MSBit = 1
    COND(3) ; ADDR(x+n)


    Sinon


    DCAL(1) ; ROL -> MSBit = 0


    x+n)


    Le seul problème, ne connaissant pas bien les possibilités qui me sont offertes, c'est le double DCAL(1) -> un par branch ce qui est très moche...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Désolé,

    Je vais te scanner le schéma.

    Merci
    Gérald.

  9. #9
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Je rigolais vraiment pour le schéma

    Ce que je te propose est-il conforme à ce que peux/veux faire ?

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Pas de problème, je ne sais jamais si je donne suffisamment d'infos ou pas sur ces forums...

    Tu trouveras en PJ le schéma. Pour ta réponse, je regarderai ce soir au calme.

    Merci en tout cas pour ton aide, c'est cool.

    Gérald.
    Images attachées Images attachées

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Je pense avoir compris le début tout du moins :
    phase de fetch
    x)EARI;AMUX(0);UAL(2);DCAL(0);SCAC;
    x+1)EAD;AMUX(0);EB(+1);UAL(1);DCAL(0);SCD;
    x+2)EAD;AMUX(0);EB(-1);UAL(0); COND(2);ADDR(x+5);DCAL(1);SCD;
    x+3)EAAC;AMUX(0);EB(-1);UAL(0);DCAL(0);SCAC;
    x+4)COND(3);ADDR(x+1)
    x+5)EAD;AMUX(0);UAL(2);DCAL(1);SCD;
    x+6) je coince, comment ajouté le 1000 par exemple ????

    Si D valait 1001 => parès le Décalage à droite il vaut 0100 commetn ajouter 1000 ???

    Si tu as une idée.
    a+
    Gérald.

  12. #12
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Désolé pour le retard beaucoup de boulot aujourd'hui...

    OR MonRegistre 1000 ; MSBit = 1 -> UAL(0) ?

    le or te permet de conserver les bits inchangés et de mettre seulement le MSBit à 1

    ou plus simplment add 1000 si ta machine le permet sans douleurs (changement de signe)

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Oui ton idée fonctionne sauf que ma machine ne fait pas le or directement et le 1000, je ne vois pas non plus comment ma machine le génère...

    ya une astuce, je me demande s'il ne faut pas utiliser le registre pointeur de pile PP...

    Je vais continuer à chercher.

    Merci
    a+

  14. #14
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    Je ne sais pas comment fonctione ta gestion de pile mais tu pourrais l'utiliser comme une structure initialisée avec ton 1000 ton 0001 et ta variable à traiter. L'offset te permettant de te ballader dedans et de récupérer ce dont tu as besoin...

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Je crois que je vais attendre samedi matin, j'ai Td et j'aurais la correction.

    Nous ne rentrons pas aussi finement dans le fonctionnement des registres.

    je te tiens au courant.

    a+

  16. #16
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    C'est toujours dommage de s'arrêter en plein mileux

    le add 1000 pas possible ?
    dans ta partie fetch tu ne peux pas initialiser un (ou deux) registre(s) qui contienne(nt) 1 et 1000
    Si tu sais "gérer" le 0001 pourquoi rencontres-tu des problèmes avec le 1000 ?

    Ton -1 est représenté comment en binaire ?

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror
    Il y a un registre qui contient la valeur -1
    il y a également un registre qui contient 1

    Le registre AC est utilisé pour décrémenté la valeur 4

    Effectivement c'est un peu dur de s'arrêter au milieu...

    je vais continuer à me creuser les méninges....

  18. #18
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    pour la représentation binaire de ton -1 -> 1000 / 1001 etc ?

    Ajouter 4 ? Si c'était 8 -> 1000 à moins que nous soyons dans des valeurs Nible signées +7/-8...

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 2
    Points
    2
    Par défaut Ror et MUL
    Voici la réponse :

    ROR D,4 avec le schéma en PJ au dessus:
    par exemple D=1001

    x)EARI;AMUX(0);UAL(2);DCAL(0);SCAC (AC=4)
    x+1)EA(-1);AMUX(0);ual(2)dcal(1);rod(1) (1111->0111 décalag à droite)
    x+2)amux(1);ual(3);dcal(0);rdo(1) (0111->1000 inversion)
    x+3)ead;eb(+1);ual(1);amux(0)cond(2);addr(x+8) (on teste la valeur du bit de poids faible de (D et (+1)), si c'est 1 je continue si c'est 0 je vais en x+8
    ici (1001)et(0001)=0001 => je continue
    x+4)ead;amux(0);ual(2);dcal(1);scd (1001->0100)
    x+5)ebd;amux(1);ual(0);dcal(0);scd (0100+1000=1100) bingo
    x+6)eaac;eb(-1);amux(0);ual(0);dcal(0)scac;cond(2);addr(0)
    x+7)cond(3);addr(x+3)
    x+8)ead;amux(0);ual(2);dcal(1);scd
    x+9)cond(3);addr(x+6)

    c'est fini, yes...


    Maintenant je dois faire MUL A,B (multiplication a=a*b)
    2 algorithmes possibles :
    - soit par addition successives (B fois)
    - le 2ième a cette tête
    Tant que B est paire
    Décale A à gauche
    Décale B à droite
    FinTq
    Si B impaire alors
    A=A+Ainit Ainit=valeur de A initiale
    Pour B je coince....

    En tout cas merci de t'être creuser la tête, c'est cool.

    Je vais en profiter si tu as une idée pour le MUL ??

    a+

  20. #20
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    La limite de la grandeur numérique finale est :

    1111 ( grande découverte comparable au premier prix nobel, enfin au moins aussi bruyant)

    donc si A=B A < 4 et de manière simplifiée A et B < 4

    Le résultat doit donc varier entre 0 (aie effet de bord à l'horizon) et 9. On pourait faire toute une série de traitements pour tous les autres "bords " de manière à pousser jusqu'à 12. Mais bon restons sobres, même avec la pluie, y'a moyen de sortir...

    Cas particuliers :
    Quel que soit A si B = 1 ne rien faire (stocker A)
    Quel que soit A si B = 0 A = 0

    Je pars du principe que les entrées sont formatées.
    (A et B < 4)

    Si B impair -> stocker A pour l'ajouter au résultat final.

    Xx) SHR B (1 bit sur la droite)

    Si AND B 1 -> SHL A (1 bit sur la gauche) -> Xx jusqu'à la nuit et plus encore

    ça devrait être une base de départ conforme à ton idée...

Discussions similaires

  1. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36
  2. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59
  3. Réponses: 4
    Dernier message: 10/09/2002, 17h09
  4. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo