Probleme exercice assembleur

nass956 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonsoir j ai un exercice a faire en langage assembleur il compile mais ne marche pas
j aurais besoin d aide pour savoir où ca coince.
voici le sujet(voir fichier joint)

et voici mon code


list p=18F4520
include P18F4520.inc
X equ 0x11
R0 equ 10H
R1 equ 11h
R3 equ 14h
mask equ B'00000001'

org 0h
movlw X ;on place la valeur X du registre de travail dans R0
movwf R0

movf R0,w ;le contenue de R0 dans le registre de travail

andlw mask ;et logique entre la valeur X et le masque pour determiner la valeur du bit de poid faible
movwf R3 ;on met le resultat dans l emplacement memoire R3

BZ R3 ;condition pour savoir si le contenue de R3 est pair ou impair
goto PAIRE

BNZ R3
goto IMPAIRE

PAIRE
movlw 0x01
movwf R1

IMPAIRE
movlw 0x02
movwf R1

END

2 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Sans avoir regardé trop en détail, à la fin du traitement PAIRE, il te manque un GOTO : tu exécutes à tous les coups le traitement IMPAIRE
    0
    1. Utilisateur anonyme
       
      En regardant de plus près...
      En plus de ce que j'ai dit ci-dessus, ta variable R3 ne sert à rien et l'instruction BZ R3 ne teste PAS si R3 est nul ou pas. Relis la signification cette instruction.
      0
    2. nass956 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
       
      enfaite je n'ai pas tres bien compris comment marche Bz je sais juste que ca execute l'instruction si c'est egale a 0 d apres le datasheet
      0
    3. Utilisateur anonyme
       
      Si quoi est égal à zéro ?
      Le saut a lieu si le flag Z est à 1, c'est à dire si la dernière instruction qui le modifie avait pour résultat zéro. Dans ton cas, cette instruction est le ANDLW : c'est lui qui positionne le Flag Z.
      0
    4. nass956 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
       
      a donc je devrais mettre quoi apres Bz ?
      0
    5. Utilisateur anonyme
       
      Il faut mettre la cible, c'est à dire l'adresse à laquelle tu veux sauter.
      Et tu n'as pas besoin de mettre le BNZ juste après le BZ : si le résultat est zéro, le BZ te fait sauter. Si ce n'est pas zéro, ça continue : il est inutile de refaire un test derrière pour vérifier que ce n'est effectivement pas zéro.
      0
  2. nass956 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
     
    Donc apres le traitement Paire il faudrait un goto vers End
    0
    1. Utilisateur anonyme
       
      oui, sinon tu exécutes IMPAIRE
      0