Questions courtes 1) Répondre par vrai ou faux aux affirmations

Questions courtes
1) Répondre par vrai ou faux aux affirmations suivantes :
a) L’architecture de Harvard est couramment utilisée dans les CPU CISC
b) Dans un microcontrôleur typique, le bus d’adresses n’est pas accessible de l’extérieur
c) La plupart des instructions ARM peuvent être exécutées conditionnellement
d) Du point de vue du programmeur, un ordinateur est un ensemble d’adresses avec des
instructions pour en manipuler le contenu et des indicateurs d’état pour valider les résultats
e) L’usage de registres de substitution permet des changements de contexte très rapides en
mode d’exception
f) Selon le standard d’appel ARM, on ne peut pas utiliser les registres R4 à R12 dans la fonction
appelée
g) Le deuxième argument d’une instruction ARM peut être modifié au préalable
h) Le bus SPI demande moins de lignes que le bus I2C
i) Les bus parallèles sont progressivement remplacés par des bus sériels à canaux multiples
dans les cartes-mères
2) Remplir les espaces blancs ou encercler la meilleure réponse dans ce qui suit :
a) Le jeu d’instruction Thumb utilise des codes d’instruction de 16-bit / 32-bit / 16- et 32-bit
b) Le bus SPI permet/ne permet pas le contrôle de flux une fois la communication avec
l’esclave initiée
c) Les transferts dans un bus I2C sont asynchrones / synchrones et utilisent des lignes de
sélection dédiées /des adresses enfouies dans les trames.
d) Le vecteur du RESET et laffectation initiale du pointeur de piles sont mis dans la section
.text / .data / .bss de la mémoire.
Assembly, C, and the ABI.
3) Donner le code machine en hexadécimal qui correspond à l’instruction add r9,r9,r11 [
Machine Code: _____________________________
4) Toutes les instructions suivantes contiennent des erreurs . Ajouter un commentaire après
chaque instruction pour décrire sommairement l’erreur.
1. MOV R0,Temp
2. MOV R4,#513
3. MUL R0,R0,R0
4. ADD R0,R0,1
5. LDR LR,R4
6. SBT R3,R5,R1
7. ADDGS R0,R0,R6
8. AND R5,R6
5) Donner le contenu de R0 et l’état des sémaphores après lexécution de chaque instruction.
Mettre ? Pour les valeurs indécidables.
Instruction N Z V C R0 (in binary) ____
? ? ? ? ????????????????
MVNS R0,#0
ADDS R0,R0,R0
ADC R0,R0,#0
MOVS R0,#3,2
ADCS R0,R0,R0,ASR #1
6) Supposer que l’on a r3=0xaabbccdd et r1=0x00001000, et tous les autres registres et
locations en mémoire sont initialisés à 0. Commenter le code qui suit et donner les contenus
des registres r1, r3, et r5 après son exécution.
STR R3, [R1, #1]
LDRB R5, [R1], #2
ORR R5, R5, #0x0f
STRH R3, [R1, #-4]!
LDR R3, [r1]
r1 = _____________________________
r3 = _____________________________
r5 = _____________________________
7) Écrire le pseudo-code suivant en assembleur ARM, en utilisant aussi peu d’instruction que
possible .
If (R0 est impair) Then R1 := R1+R0
Else R1 := R1-R0
8) Considérer le programme suivant :. [10]
/** Print an int.*/
void printint(int a) { printf("%d\n", a); }
/** Sum the first n elements of array a */
int add(int a[], int n) {
int i, sum=0; for (i =
0; i < n; i++)
sum+=a[i];
printint(sum);
return(sum);
}
/** Test program. Should print out 10 */
main () {
int x[] = {1, 2, 3, 4, 5};
add(x, 4);
}
Récrire la fonction add en langage assembleur ARM, en utilisant les conventions d’usage pour
l’appelant et l’appelé.
9) Le code c suivant fait lapproximation de la racine carrée d’un nombre entier entre 0 et 231-
1. La fonction retourne la partie entière du résultat désiré. Réécrire le code en assembleur
ARM et écrire une fonction main qui l’appelle avec 100 comme argument.
/** Approximation de la racine carrée dun nombre entier par la
méthode de bisection. La valeur de retour diffère de de la vraie valeur
par moins que 1 */
unsigned int sqrt(unsigned int x) {
unsigned int a=0;
unsigned int b=2^15;
unsigned int done=0;
int c_old;
int c = -1;
do {
c_old = c;
c = (a+b)/2;
if (c*c == x) {
done = 1;
} else if (c*c < x) {
a = c;
} else {
b = c;
}
} while ((!done) && (c != c_old));
return c;
}
Adressage mémoire
a) Supposer que l’on a un registre de périphérique REG_FOO dont l’adresse est spécifiée par
une directive #define dans un programme en c. Modifier la fonction main u programme
en c qui suit pour ajouter 7 au contenu de REG_FOO. [10]
#include <stdio.h>
#include <inttypes.h>
#define REG_FOO 0x40000140
main () {
// code requis
printf(“0x%x\n”, *reg); // Prints out new value
}
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !