Contrôle systèmes à microprocesseurs 2017 - informatique ind

Informatique Industrielle : Contrôle Systèmes à microprocesseurs 2017

Télécharger PDF

Exercice 1 : Analyse du programme et modes d’adressage

Instruction : Mode d’adressage : Description de l’opération réalisée : Contenu modifié (Mémoire, registres, pile, flags ...)

SEI : Implicite : Désactive les interruptions (masque des interruptions à 1). : Registre PSW (bit I = 1)

LDA A $0EA1 : Absolu : Charge le contenu de l’adresse $0EA1 dans le registre A. : Registre A = $BC, mémoire $0EA1 non modifiée

LDA B $0EA2 : Absolu : Charge le contenu de l’adresse $0EA2 dans le registre B. : Registre B = $CD, mémoire $0EA2 non modifiée

INC A : Implicite : Incrémente le contenu du registre A de 1. : Registre A = $BC + 1 = $BD

SUB B #$05 : Immédiat : Soustrait la valeur $05 du registre B et place le résultat dans A. : Registre A = $BD - $05 = $B8, Registre B non modifié, flags (N, Z, V, C) modifiés

LDX $0EA3 : Absolu : Charge le contenu de l’adresse $0EA3 dans le registre X. : Registre X = $CD (valeur supposée à $0EA3), mémoire $0EA3 non modifiée

JSR $00, X : Indexé-X : Appelle la sous-routine située à l’adresse pointée par X. : Registre PC = adresse de la sous-routine, pile modifiée (empile PC+2), flags non modifiés

TAP : Implicite : Transfère le contenu du registre A vers le registre PSW (bit T). : Registre PSW (bit T = valeur de A), Registre A non modifié

CLI : Implicite : Réactive les interruptions (masque des interruptions à 0). : Registre PSW (bit I = 0)

CLC : Implicite : Réinitialise le flag de retenue (C) à 0. : Flag C = 0

CLV : Implicite : Réinitialise le flag d’overflow (V) à 0. : Flag V = 0

SWI : Implicite : Interruption logicielle (appel de la routine d’interruption SWI). : Registre PC modifié, pile modifiée (empile PC+2 et PSW)

Exercice 2 : Code pour manipulation de la pile et des registres

Voici le programme demandé pour manipuler la pile et les registres :

LDA A #$00D0   ; Charger une valeur temporaire pour calculer SP
TAP         ; Transférer A vers PSW pour obtenir SP (exemple : 0x10)
CLR A       ; Réinitialiser A pour éviter interférence
LDX #$0013  ; Charger X avec l'adresse de la valeur 5D dans la pile
LDA A $00,X  ; Lire la valeur 5D de la pile (adresse $0013) et la mettre dans B
STB B       ; Stocker la valeur dans B (5D)

LDA A #$F9   ; Charger A par la valeur F9
STA A $00,X  ; Empiler F9 au sommet de la pile (adresse $0013)

ABA         ; Additionner le contenu de A et de B
INC B       ; Incrémenter B

TAP         ; Transférer le contenu de A au CCR (PSW)

LDA B #$00FF ; Charger B avec la valeur 0FFF (adresse de stockage)
STA B $00,X  ; Ranger le contenu de B à l’adresse mémoire $0FFF (valeur finale = B + 1)

SWI         ; Arrêter l'exécution par interruption programme

FAQ

Q : Comment calculer l’adresse de la valeur 5D dans la pile ?

R : La pile est descendante, donc l’adresse de la valeur 5D est SP + 1 (exemple : $0013 si SP = $0010).

Q : Pourquoi utiliser TAP pour transférer A au CCR ?

R : TAP transfère le contenu du registre A vers le registre PSW (Condition Code Register), ce qui modifie les flags du CCR.

Q : Comment incrémenter B après l’addition ?

R : Utiliser l’instruction INC B pour ajouter 1 au contenu du registre B.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne