Probleme exercice assembleur

Fermé
nass956 Messages postés 36 Date d'inscription jeudi 14 septembre 2017 Statut Membre Dernière intervention 18 novembre 2018 - 6 févr. 2018 à 17:19
 Utilisateur anonyme - 6 févr. 2018 à 23:34
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

Utilisateur anonyme
6 févr. 2018 à 18:06
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
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
nass956 Messages postés 36 Date d'inscription jeudi 14 septembre 2017 Statut Membre Dernière intervention 18 novembre 2018
6 févr. 2018 à 18:57
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
Utilisateur anonyme
6 févr. 2018 à 19:24
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
nass956 Messages postés 36 Date d'inscription jeudi 14 septembre 2017 Statut Membre Dernière intervention 18 novembre 2018
6 févr. 2018 à 20:50
a donc je devrais mettre quoi apres Bz ?
0
Utilisateur anonyme
6 févr. 2018 à 21:24
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
nass956 Messages postés 36 Date d'inscription jeudi 14 septembre 2017 Statut Membre Dernière intervention 18 novembre 2018
6 févr. 2018 à 18:55
Donc apres le traitement Paire il faudrait un goto vers End
0
Utilisateur anonyme
6 févr. 2018 à 19:22
oui, sinon tu exécutes IMPAIRE
0