GPA770 Microélectronique appliquée
Exercices série B.1
1. Un instruction en mode d’adressage direct peut seulement accéder des données dans
une étendue d’adresses de 0000 à 00FF. Est-ce vrai que l’instruction doit aussi être dans
cette étendue d’adresses?
Non, l’instruction peut être à n’importe quel endroit dans toute la mémoire.
2. Quel est le mode d’adressage d’une instruction qui ne forme pas une adresse mémoire?
Le mode d’adressage inhérent.
3. Donnez 2 instructions qui indiquent s’il y a eu emprunt en affectant le bit d’état C du
CCR.
La plupart des instructions qui effectuent un soustraction, e.g., SUBA, SBS, SBCB,
SUBD, et CMPA., indiquent s’il y a eu emprunt avec le bit C.
4. Est-ce que les bits N et Z du CCR peuvent les deux être égal à 0, ou bien à 1, suite à
l’exécution d’un instruction LDAA?
A la suite d’un LDAA, les bits N et Z ne peuvent les deux être ‘1’, mais peuvent les
deux être ‘0’.
5. Écrire une séquence d’instructions qui incrémente un nombre à 2 bytes (16 bits) en
mémoire, sans devoir utiliser les accumulateurs A et B.
RAMStart EQU $0800
ROMStart EQU $4000
ORG RAMStart
NUM_DATA FDB $05FF ;exemple de valeur à incrémenter
ORG ROMStart
LDX #RAMStart
INC 1,X
BCC DONE
INC 0,X
DONE END
6. Quel est le rôle d’un assembleur?
La conversion en code machine de fichiers source, qui sont écrits en langage
assembleur.
7. Assemblez le segment de code assembleur suivant à la main, et organiser le code
machine dans la table qui suit.
ORG $1000
Var FCB $50
ORG $2000
LDAA Var
Loop INCB
SUBA #5
STAA Var
BEQ Loop
END
Adresse mémoire
Valeur
1000
50
2000
B6
10
00
2003
52
2004
80
05
2006
7A
10
00
2009
27
F8
8. Est-ce qu’on peut initialise un pointeur de pile SP avec l’adresse de la première
instruction du programme?
Oui. En fait, on initialise souvent de cette façon car les programmes grandissent
vers le bas, tandis que la pile grandit vers le haut.
4. Écrivez un programme qui compte le nombre de bytes dans une table qui sont égal à
zéro. La table consiste de 6 nombres et commence à l’adresse $2000. Stocker les
résultats à l’adresse mémoire $5000.
Result EQU $5000
Table EQU $2000
ORG $1100
CNT FCB $06
ORG $1000
LDAA CNT
LDX #Table
LDY #$0000
TEST CMPA #$00
BEQ DONE
LDAB 1,X+
BNE Next
INY
Next DECA
BRA TEST
DONE STY Result
END
5. Quel est le contenu du registre d’index IX après l’exécution du programme suivant:
LDS #$2000
PSHA
PSHY
TSX
PULX
[IX] = [IY]
6. En partant du programme suivant:
ORG $F054
LDS #$7F88
LDY #$AB63
LDAB #$36
ABY
PSHY
SUBB #$2A
a) Après l'exécution du programme, quel est le contenu des registres clés du 68HC12?
B = $0C
Y = $AB99
SP = $7F86
PC = $F061
CCR: N = 0, Z = 0
b) Quels sont les parties du CCR qui sont modifiées d’après l’exécution de PSHY et
quels sont leurs nouveaux contenus?
AUCUNE
7. Répondez aux questions à partir du fichier probleme7.lst suivant:
Fichier probleme7.lst
;*******************************************
; DATA
;*******************************************
ORG $0010
0010 46 VALUE FCB $46
;*******************************************
; PROGRAMME PRINCIPAL
;*******************************************
ORG $C100
C100 CFE0 00 START LDS #$E000
C103 9610 LDAA VALUE
C105 16C1 09 JSR SWAP
C108 3F SWI
;******************************************
; SWAP DES 4 BITS HIGH ET LOW DE L’ACC A
;******************************************
C109 48 SWAP LSLA
C10A 89 00 ADCA #0
C10C 48 LSLA
C10D 89 00 ADCA #0
C10F 48 LSLA
C110 89 00 ADCA #0
C112 48 LSLA
C113 89 00 ADCA #0
C115 3D RTS
END
Indiquez le contenu de PC, SP, A et des adresses mémoire $DFFF, $DFFE et $DFFD
immédiatement après l’exécution des instructions suivantes:
a. JSR à l’adresse C105:
PC = C109
SP = DFFE
A = 46
DFFD = pas connu
DFFE = C1
DFFF = 08
b. LSLA à l’adresse C10C:
PC = C10D
SP = DFFE
A = 18
DFFD = pas connu
DFFE = C1
DFFF = 08
c. RTS à l’adresse C115:
PC = C108
SP = E000
A = 64
DFFD = pas connu
DFFE = pas connu
DFFF = pas connu
Quel sera l’impact sur le fonctionnement du programme si la valeurs stockée aux
adresses mémoires $C101 et $C102 est change de $E000 aux valeurs suivantes?
a. $C105: Le programme calcul correctement la valeur dans A, et
termine comme il le doit. Cependant, il va écrire par-dessus le op-
code JSR et l’adresse directe de l’instruction LDAA (mauvais style).
b. $C116: Le programme ne calcul pas correctement la valeur dans A,
et ne termine pas car il écrit par-dessus le op-code RTS et l’opérant
immédiat de l’instruction ADCA. C1 sera ajouté à A, en ensuite
l’instruction INX sera exécutée (INX à un op-code de 08).
1 / 7 100%