Exercices GPA770

publicité
GPA770 Microélectronique appliquée
Exercices – série B.1
1. Considérez le segment de code suivant. Quelles instructions de branchement seront
activées à la suite de l’exécution du code suivant? Répondez oui ou non pour chaque
instruction.
LDAB
SUBB
#2
#$DF
…suite aux deux instructions, B = $02 - $DF = $23, avec
N=0, Z=0, V=0 et C=1, donc:
a) BEQ non
d) BMI non
b) BLO oui
e) BHI non
c) BGT oui
f) BRA oui
2. Un instruction en mode d’adressage direct (DIR) 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.
3. Quel est le seul mode d’adressage d’une instruction qui ne forme pas une adresse
mémoire?
Le mode d’adressage inhérent (INH).
4. Quelle adresse mémoire sera accédée par le CPU pour les exemples suivants
d’adressage indexé, sachant que l’index X pointe à l’adresse mémoire $0800:
a) LDAA
b) STAA
c) LDAA
2, X
2, +X
-2, X
addresse : $0802
addresse : $0802
addresse : $07FE
4. 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.
5. Est-ce que les bits N et Z du CCR peuvent les deux être égal à 0, ou bien à 1, suite à
l’exécution d’une 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’.
6. Supposez qu’on veut exécuter (d’une façon indépendante) le segment de code suivant
avec le 68HC12. Quelle sera la valeur des bits d’état C, N, V et Z au registre CCR, ainsi
que le contenu de l’accumulateur A, juste après l’exécution de la séquence de code?
LDAA
ADDA
ADCA
#$95
#$12
#%01011001
A = $00, Z = 1, C = 1, V = 0, N = 0
7. Écrire une séquence d’instructions qui incrémente un nombre qui est représenté sur 2
octets (16 bits) en mémoire, sans devoir utiliser les accumulateurs A et B.
Voir l’exemple codé exB1_8 pour le code assembleur.
RAMStart
ROMStart
EQU
EQU
$0800
$4000
NUM_DATA
ORG
FDB
RAMStart
$05FF
;exemple de valeur à incrémenter
ROMStart
#RAMStart
1,X
DONE
0,X
DONE
ORG
LDX
INC
BNE
INC
END
8. Quel est le rôle d’un assembleur?
La conversion de fichiers source (qui sont écrits en langage assembleur) en code
machine comprit par le CPU.
7. Supposez que le registre IY contient $C919, et que le registre SP contient $1000. Quel
sera l’impact sur le contenu de IY, de SP, et de la mémoire RAM juste après l’exécution
de l’instruction PSHY?
IY =
SP =
8. Assemblez ce code assembleur à la main, et organiser le code machine résultant dans
la table qui suit. Il s’agit de montrer les valeurs numériques hexadécimales
correspondant aux adresses mémoire après que ce programme a été assemblé. Combien
d’octets le programme principal occupe t-il en mémoire ROM?
AGAIN
ORG
RMB
BRCLR
Adresse mémoire
C020
C021
C022
C023
9. Assemblez le segment de code
machine dans la table qui suit.
ORG
Var FCB
ORG
LDAA
Loop INCB
SUBA
STAA
BEQ
END
Valeur numérique (hex)
0F
32
F0
FC
assembleur suivant à la main, et organiser le code
$1000
$50
$2000
Var
#5
Var
Loop
Adresse mémoire
1000
…
2000
2003
$C010
$10
3, X+, $F0, AGAIN
Valeur
50
…
B6
10
00
52
2004
80
05
7A
10
00
27
F8
2006
2009
10. 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.
11. Supposez que le registre IY contient $C919, et que le registre SP contient $1000.
Quel sera l’impact sur le contenu de IY, de SP, et de la mémoire RAM juste après
l’exécution de l’instruction PSHY?
Adresse mémoire
$0FFE
$0FFF
$1000
IY = $C919
SP = $0FFE
Valeur numérique
$C9
$19
12. É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
Table
EQU
EQU
$5000
$2000
CNT
ORG
FCB
$1100
$06
TEST
ORG
$1000
LDAA
CNT
LDX
#Table
LDY
#$0000
CMPA #$00
BEQ
DONE
LDAB
1,X+
DONE
BNE
INY
Next
BRA
STY
END
Next
DECA
TEST
Result
13. 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]
14. En partant du programme suivant:
ORG
LDS
LDY
LDAB
ABY
PSHY
SUBB
$F054
#$7F88
#$AB63
#$36
#$2A
a) Quel est le contenu des registres clés du 68HC12 après l'exécution du programme?
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?
Aucunes sont modifiées
15. Répondez aux questions à partir du fichier probleme7.lst suivant:
Fichier probleme7.lst
0010 46
;*******************************************
; DATA
;*******************************************
ORG $0010
VALUE
FCB $46
C100
C103
C105
C108
CFE0 00
9610
16C1 09
3F
;*******************************************
; PROGRAMME PRINCIPAL
;*******************************************
ORG $C100
START
LDS #$E000
LDAA VALUE
JSR SWAP
SWI
48
89
48
89
48
89
48
89
3D
;******************************************
; SWAP DES 4 BITS HIGH ET LOW DE L’ACC A
;******************************************
SWAP
LSLA
ADCA #0
LSLA
ADCA #0
LSLA
ADCA #0
LSLA
ADCA #0
RTS
C109
C10A
C10C
C10D
C10F
C110
C112
C113
C115
00
00
00
00
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
DFFD
DFFE
DFFF
= 18
= pas connu
= C1
= 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 valeur stockée aux adresses
mémoires $C101 et $C102 est changée 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 opcode JSR et l’adresse 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).
16. Décrivez brièvement la fonction du programme assembleur suivant.
Result
Table
CNT
TEST
Next
DONE
EQU
EQU
ORG
FCB
ORG
LDAA
LDX
LDY
CMPA
BEQ
LDAB
BNE
INY
DECA
BRA
STY
END
$5000
$2000
$1100
$06
$1000
CNT
#Table
#$0000
#$00
DONE
1,X+
Next
TEST
Result
Ce programme compte le nombre d’octets dans une table qui ont une valeur de $00.
La table comprend de 6 valeurs numériques stockées à partir de l’adresse mémoire
$2000. La somme est stockée à l’adresse mémoire $5000.
17. Écrivez une sous-routine qui échange les 4 bits du haut et les 4 du bas de
l’accumulateur A. Par exemple, si le contenu de A est $35, l’exécution de la sous-routine
va changer son contenu à $53.
Voir l’exemple codé exB1_4 pour le code assembleur.
18. Complétez le programme en assembleur suivant. Il additionne 2 nombres de 4 octets
(32 bits) qui sont stockés aux adresses mémoire $0800-$0803 et $0804-$0807,
respectivement. Le programme commence par l’addition de l’octet le moins
significatif, et progresse vers l’octet le plus significatif. Le résultat global de
l’addition est stocké sur 4 octets aux adresses mémoire $0810-$0813.
ORG
LDD
ADDD
STD
LDAA
ADCA
STAA
LDAA
ADCA
STAA
END
$4000
$0802 ; addit. et stocker les 2 octets LSB
$0806
$0812
$0801 ; addit. et stocker l’octet le 2ème MSB
$0805; incluant la retenue des 2 octets LSB
$0811
$0800 ; addit. et stocker l’octet MSB
$0804; incluant la retenue des 3 octets LSB
$0810
19. Indiquez brièvement les trois opérations de base qui sont effectuées par un contrôleur
à logique floue afin de générer un signal de contrôle. Quelle est la fonction de chaque
opération?
RÉPONSE:
20. A partir du programme assembleur suivant:
TABLE
SOMME
VERIF
ARRET
EQU
ORG
RMB
ORG
LDAB
LDX
LDAA
CMPA
BEQ
ADDB
INX
INCA
BRA
STAB
END
$5000
$0800
1
$4000
#$00
#TABLE
#$00
#$05
ARRET
0,X
VERIF
SOMME
5-1 (5 points) Décrivez brièvement la fonction du programme.
RÉPONSE:
5-2 (15 points) Assemblez ce code assembleur à la main, et organiser le code machine
résultant dans la table qui suit. Il s’agit de montrer les valeurs numériques
hexadécimales correspondant aux adresses mémoire après que ce programme a été
assemblé.
Adresse mémoire
Valeur numérique (hex)
$0800
. . .
$4000
. . .
5-3 (5 points) Combien d’octets le programme principal occupe t-il en mémoire ROM?
RÉPONSE:
Chapitre 2 du livre de Pack et Barrett (p.69)



Fundamental: 4, 5, 8, 9 et 10
Advanced: 3, 5 et 9
Challenging: 2 et 4
Réponses pour la partie Fundamental:
Q4: CPD #1234
Q5: Z=0, C=0, H=0, N=1
Q8: l’instruction est utilisée en mode indexé, et charge le contenu à l’adresse mémoire
IX+$20 dans A. (Le $20 représente le décalage par rapport au IX.)
Q9:
ORG $0000
FCB $12
FCB $10
Q10: Avec les instructions CMPA et BITB, le contenu de l’accumulateur B reste
inchangé à $34. (Seul le contenu du CCR sera affecté.)
Réponses pour la partie Advanced:
Q3: L’utilisation du mode d’adressage direct permet de réduire les dimensions du code,
et le temps d’exécution du programme.
Q5: Il n’y a aucune restriction en termes de l’étendue d’adressage effective. On peut
accéder des valeurs numériques à des adresses qui s’étendent de $0000 à $FFFF.
Q9: On commence en calculant le nombre de bytes associé à chaque instruction. Les
instructions DECA et TSTA consistent tous les deux d’un op-code à 1 byte, tandis que
BNE consiste d’un op-code à 1 byte et d’un opérant de 1 byte. L’instruction BNE est
utilisée pour vérifier le bit d’état Z du CCR. Quand le bit Z est zéro, l’instruction BNE
modifie la valeur du PC selon:
PC + décalage PC
On doit donc avoir un décalage de 4 bytes vers l’arrière, alors XX = $FC. La valeur $FC
correspond au complément à 2 de ‘-4’ représentée sur 8 bits.
Réponses pour la partie Challenging:
Q2: Le mode d’adressage indexé devrait être utilisé pour copier un table de valeurs d’un
endroit à l’autre en mémoire car, avec ce mode, l’adresse effective est définit comme la
somme d’un registre d’index (IX, IY, SP, PC) et d’un décalage. En effet, ce mode
permet d’utiliser un registre d’index comme pointeur au début d’une liste, et le décalage
pour bouger dans cette liste. Ce mode représente une façon flexible de représenter un
adresse effective comme variable.
Q4: Programme pour copier une table de 5 valeurs des adresses mémoires commencent à
$5000 vers les adresses mémoires commencent à $6000.
Voir l’exemple codé exB1_10 pour le code assembleur.
SOURCE:
DESTINATION:
EQU
EQU
$5000
$6000
; adresse source
; adresse destination
NUM_DATA:
ORG
FCB
$4000
$05
; nombre de bytes à copier
ORG
LDAA
LDX
LDY
CMPA
BEQ
LDAB
STAB
DECA
BRA
END
$4100
NUM_DATA ; #$05 --> A
#SOURCE
; source: $5000 --> IX
#DESTINATION
; destination:$6000 -> IY
#$00
; condition d’arrêt
DONE
; si A = $00, DONE
1,X+
; source, poste inc.
1,Y+
; destin., poste inc.
COPY:
COPY
Téléchargement