1 Numération 2 Accès à la mémoire

Transcription

1 Numération 2 Accès à la mémoire
UGA - UFR IM2 AG - MASTER 2 CCI
Devoir surveillé Langage Machine
20 Octobre 2016 - Durée 1h
Tous documents autorisés. Ordinateurs et téléphones interdits.
1
Numération
1. On considère des entiers naturels représentés sur 8 bits. Donnez la représentation en binaire de 22, 163 en justifiant vos réponses.
2. On considère des entiers relatifs représentés sur 8 bits. Donnez la représentation
en binaire de +22, -36 en justifiant vos réponses.
3. On dispose d’une mémoire dont les adresses sont représentées sur 16 bits. Combien d’octets peut-on désigner ?
2
Accès à la mémoire
Les directives .byte, .half et .word permettent respectivement de déclarer un
octet (8 bits), un mot de 16 bits et un mot de 32 bits.
On considère le programme ci-dessous :
.data
d1: .byte
.half
.byte
.word
.word
0x41
0x424c
0x4d
163
-36
.text
main: LDR r1, ptr_d1
e1:
LDRB r2, [r1]
ADD r1, r1, #1
e2:
LDRH r3, [r1]
ADD r1, r1, #3
e3:
LDR r4, [r1]
ADD r1, r1, #4
e4:
LDR r5, [r1]
e5:
ptr_d1: .word d1
Les zones data et text sont respectivement chargées aux adresses 0x3000 et
0x8000.
1
1. Faire un dessin montrant le contenu de la zone .data. Les valeurs doivent être
exprimées en hexadécimal (base 16).
2. Donner le contenu du registre r1 juste avant d’exécuter l’instruction à l’étiquette
e1.
3. Donner le contenu du registre r1 juste avant d’exécuter l’instruction à l’étiquette
e2.
4. Donner le contenu du registre r1 juste avant d’exécuter l’instruction à l’étiquette
e3.
5. Donner le contenu du registre r1 juste avant d’exécuter l’instruction à l’étiquette
e4.
6. Donner le contenu des registres r2, r3, r4 et r5 lorsque le contrôle est à l’étiquette e5.
3
Programmation
On considère le programme C suivant calculant le maximum des éléments d’un
tableau d’entiers.
int tab [20];
void main () {
int max, i;
i=0;
max = tab[i];
while (i<20) {
i = i + 1;
if (max < tab[i]) max = tab[i];
}
}
Soit la déclaration suivante pour le tableau tab dans la zone data.
.data
tab : .skip 80
1. Sur combien d’octets sont codés les entiers du tableau
2. Donner dans la zone text la traduction en langage d’assemblage ARM du programme. Vous indiquerez les étapes intermédiaires de la traduction (accès à
tab[i]) et les registres utilisés (implantation des variables).
2
4
ANNEXE : instructions du processeur ARM
Nom
Explication du nom
Opération
AND
AND
et bit à bit
EOR
Exclusive OR
ou exclusif bit à bit
SUB
SUBstract
soustraction
RSB
Reverse SuBstract
soustraction inversée
ADD
ADDition
addition
ADC
ADdition with Carry
addition avec retenue
SBC
SuBstract with Carry
soustraction avec emprunt
RSC Reverse Substract with Carry soustraction inversée avec emprunt
TST
TeST
et bit à bit
TEQ
Test EQuivalence
ou exclusif bit à bit
CMP
CoMPare
soustraction
CMN
CoMpare Not
addition
ORR
OR
ou bit à bit
MOV
MOVe
copie
BIC
BIt Clear
et not bit à bit
MVN
MoVe Not
not (complément à 1)
Bcc
Branchement
BL
Branchement à un
sous-programme
LDR
STR
“load”
“store”
remarque
pas
pas
pas
pas
rd
rd
rd
rd
pas rn
pas rn
cc = condition
Cf. table
ci-dessous
adresse de retour
dans r14=LR
L’opérande source d’une instruction MOV peut être une valeur immédiate notée #5
ou un registre noté Ri, i désignant le numéro du registre. Il peut aussi être le contenu
d’un registre sur lequel on applique un décalage de k bits ; on note Ri, DEC #k, avec
DEC ∈ {LSL, LSR, ASR, ROR}.
La table suivante donne les codes de conditions arithmétiques cc pour l’instruction
de branchement Bcc.
3
mnémonique
signification
condition testée
EQ
égal
Z
NE
non égal
Z
≥ dans N
C
CS/HS
CC/LO
< dans N
C
MI
moins
N
PL
plus
N
débordement
V
VS
VC
pas de débordement
V
HI
> dans N
C ∧Z
LS
≤ dans N
C ∨Z
GE
≥ dans Z
(N ∧ V ) ∨ (N ∧ V )
< dans Z
(N ∧ V ) ∨ (N ∧ V )
LT
GT
> dans Z
Z ∧ ((N ∧ V ) ∨ (N ∧ V ))
LE
≤ dans Z
Z ∨ (N ∧ V ) ∨ (N ∧ V )
toujours
AL
4

Documents pareils