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 :

[65816] instruction asl


Sujet :

Autres architectures Assembleur

  1. #1
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut [65816] instruction asl
    Bon mon probleme rien de bien méchant , mais je ne comprend pas trop les 'dérivé' de l'instruction asl par exemple:
    Marche sans soucis par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lda #$02
    sta $0000
     
    lda #$04
    asl $0000
    Il ne me fait pas un décalage de 2 , j'ai mal compris un truc ?

    Merci avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonsoir,

    Je ne comprends pas trop où tu veux en venir. « ASL $0000 » est censée décaler vers la gauche les bits de l'octet à l'adresse 0000. Est-ce que tu lis cette adresse après l'avoir modifiée ? Si oui, il est possible que cette position se trouve en ROM ou soit un port d'entrée/sortie.

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Merci par précaution tu me l'as (re)expliqué que faisait cette instruction
    Je l'ai mal compris ,je croyais que asl faisait un décalage de x (x étant la valeur de ce qui se trouve dans l'adresse) , brève je pensais que ça marchais comme adc addr par exemple.

    Donc j'ai quelque question , est -il possible de faire un decalage plus grand que de 1 ?
    Un moment je doit faire un décalage de 7 donc je fais 7 asl A , mais y a pas un moyen de réduire cette écriture ? (et donc de le rendre plus modulable) vu quelque fois j'aurais besoin que le décalage sera de 5,6,7,8 , ou alors je dois faire une boucle ? (ce qui m'arrange pas a vrai dire).

    Autre question pour la soustraction et l'addition , apparemment elle sont peu précise (dans le sens ou cela additionne/soustrait avec un flag) par exemple adc l'additionne avec le carry et sbc soustrait avec le borrow , mais a la limite je peux clear le carry avec instruction clc mais pour le sbc ? (pour le moment quand j'ai besoin d'un sbc précis je passe par clc/adc et eor qui font équivalent d'une soustraction).
    D'ailleurs je n'ai pas compris qu'on le carry s'active , je pense que c'est après une comparaison mais vu que un moment j'avais fait un clear et après quelque lda/adc/sta/ora le carry c'est activé (et donc mon adc c'est retrouvé décalé de 1).

    Merci 'avance

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    En fait, je ne connais pas le 65816 en particulier, qui a la possibilité de passer en mode « natif » mais vis-à-vis du décalage, je ne pense pas que ce soit possible. En plus, le bit sortant est censé atterrir dans C, donc un décalage de plus de 1 écrase les bits précédents. Comme sur le plan électronique, ça demande quand même pas mal de câblages, c'est réservé aux micro-processeurs un peu plus gros. C'est aussi pour cela qu'on a introduit le préfixe REP sur Intel. Ça permet de régler le problème une fois pour toutes.

    Note qu'en huit bits, tu n'as besoin de décaler ton registre que huit fois au maximum (après, il est vide). Il est donc tout-à-fait concevable d'écrire huit fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    etiquette:
        ASL A
        ASL A
        ASL A
        ASL A
        ASL A
        ASL A
        ASL A
        ASL A
    … surtout si tu travailles directement sur un registre, auquel cas ton code opération a des chances de tenir sur un seul octet, et l'espace occupé sera moins gros que celui d'une boucle. Tu pourras également utiliser le mode indexé pour faire un saut vers « etiquette + n » avec n de 0 à 7 pour moduler facilement le nombre de rotation à effectuer.

    Enfin, dans le cas de sept rotations en particulier, seul le bit de poids faible subsiste, et se retrouve à la place du bit de poids fort. Tu peux par exemple faire un ROR, charger 0 dans le registre concerné, puis à nouveau un ROR. Il y a probablement plus rapide encore en fonction des contextes.

    Pour la retenue, voici un document parmi d'autres qui donne les spécifications du 65816 : http://westerndesigncenter.com/wdc/d...n/w65c816s.pdf
    Tu pourras y voir entre autres à quels moments le bit C (la retenue) est affectée.

    Dans le cas d'une addition, la retenue se propage de bit en bit et donc, à la fin de l'opération, C vaut la valeur de la retenue pour le bit de poids le plus fort. C'est d'ailleurs ce qui te permet d'enchaîner éventuellement avec l'octet suivant. Accessoirement, une addition de deux nombres huit bits donne un résultat sur neuf bits. Il est tronqué sur huit pour rentrer dans le registre et on parle de débordement s'il le dépasse mais, dans ce cas précis, il te suffit d'examiner la retenue pour prendre connaissance de la totalité du résultat.

  5. #5
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Ok merci je comprend mieux pour le décalage , et merci pour astuce de etiquette + n , c'est bête mais c'est le truc que j'ai un peu de mal a trouver seul ce genre de chose ,je reste souvent bloqué sur une idée toute faite niveau instruction comme asl ou une etiquette = une adresse alors que ouais on peut commencer a le lire a partir de n octet (en plus ça reste correct en perf) , même si quelque fois j'arrive a réduire pas mal écriture après plusieurs relecture de code.
    Pour les rotation je garderais ça en tête.
    Sinon pour info j'ai rarement besoin de faire des opération sur 16 bits , ça m’étonnerai que j'aurais besoin d'un décalage de plus de 8(je met par contre les registre X et Y sur 16).
    Ben merci pour la doc , je lirai ça pour connaitre la valeur du C (et surement pour d'autre info utile).
    Voila et merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instructions ROL et ROR
    Par bigbang dans le forum Assembleur
    Réponses: 13
    Dernier message: 01/03/2003, 02h06
  2. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 14h44
  3. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17
  4. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    Réponses: 4
    Dernier message: 29/07/2002, 14h58
  5. [TASM] Problème concernant l'instruction LGDT
    Par Ninkosen dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/07/2002, 19h09

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