Probleme exercice assembleur

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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.
    2. 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
    3. 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.
    4. a donc je devrais mettre quoi apres Bz ?
    5. 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.
  2. Donc apres le traitement Paire il faudrait un goto vers End
    1. oui, sinon tu exécutes IMPAIRE