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