ISA et assembleur

Apprenez les bases des jeux d'instructions et du langage assembleur avec des QCM : formats d'instruction, modes d'adressage, instructions RISC-V de base, conventions d'appel et cadres de pile.

S'entraîner sur 10 questionsQuestions aléatoires de ce thème · environ 5 minutes S'entraîner sur ce thèmeToutes les questions de ce thème dans un ordre aléatoire Questions à revoirNe refaire que les questions manquées lors de la dernière tentative

ISA et assembleur : points clés

Une architecture de jeu d'instructions (ISA) est le contrat entre le logiciel et le matériel. Elle définit les instructions existantes, leur codage en bits et la manière de désigner registres et mémoire. Tout CPU qui respecte la même ISA peut exécuter les mêmes programmes, aussi différente que soit son organisation interne.

Le langage assembleur écrit les instructions machine sous une forme lisible par l'humain. Connaître les instructions RISC-V de base, l'usage des registres, le passage des arguments et des valeurs de retour entre fonctions (convention d'appel) et la construction des cadres de pile montre ce que génèrent les compilateurs et comment les programmes s'exécutent réellement sur un CPU.

Toutes les questions sur ISA et assembleur (50)

  1. Quelle affirmation concernant deux CPU adoptant la même architecture de jeu d'instructions (ISA) est correcte ?
  2. Quelle caractéristique d'une architecture load-store comme RISC-V est correcte ?
  3. Quelle propriété du registre x0 (zero) de RISC-V est correcte ?
  4. Quels sont les registres entiers à usage général de RV32I (jeu d'instructions entières de base 32 bits) de RISC-V ?
  5. Quelle relation entre langage assembleur et langage machine est correcte ?
  6. Par quelle instruction l'assembleur remplace-t-il réellement la pseudo-instruction RISC-V « nop » (ne rien faire) ?
  7. Quelle est la différence correcte entre les instructions RISC-V « add » et « addi » ?
  8. Après l'exécution du code RISC-V ci-dessus, quelle est la valeur du registre a2 ?
  9. Quel est le fonctionnement correct de l'instruction RISC-V « lw t0, 8(sp) » ?
  10. Dans l'instruction de branchement conditionnel RISC-V « beq a0, a1, label », comment l'adresse de la cible label est-elle représentée ?
  11. Quel est l'avantage d'utiliser l'adressage relatif au PC pour les branchements et sauts ?
  12. Quelle affirmation concernant la longueur des instructions de base RISC-V et des instructions x86 est correcte ?
  13. Quel est l'avantage le plus pertinent d'une longueur d'instruction fixe ?
  14. Dans les instructions RISC-V, les champs désignant les registres (rd, rs1, rs2) font chacun 5 bits. Quelle en est la raison ?
  15. L'immédiat de l'instruction RISC-V addi est un entier signé de 12 bits. Quelle plage cet immédiat peut-il représenter ?
  16. En RISC-V, quelle est la méthode courante pour charger dans un registre une constante de 32 bits qui ne tient pas dans un immédiat de 12 bits (par exemple 0x12345678) ?
  17. Pour construire la constante 0x12345FFF en RISC-V avec les deux instructions lui et addi, quelle combinaison est correcte ?
  18. Quel est le fonctionnement correct de l'instruction RISC-V auipc (add upper immediate to PC) ?
  19. En RISC-V (RV32I), après exécution de « addi t0, zero, -1 », quelle valeur de 32 bits contient t0 ?
  20. Un octet en mémoire contient 0x80. Quelle combinaison correspond aux valeurs obtenues en chargeant cet octet dans un registre de 32 bits avec les instructions RISC-V lb et lbu ?
  21. Quelle est la différence correcte entre RISC-V et x86 concernant le mécanisme de branchement conditionnel ?
  22. Quel est le fonctionnement correct de l'instruction RISC-V « slt t0, a0, a1 » ?
  23. Une fois l'exécution du code RISC-V ci-dessus terminée, quelle est la valeur de t0 ?
  24. Les instructions de branchement conditionnel RISC-V (format B) représentent la distance jusqu'à la cible par un nombre d'octets signé sur 13 bits, dont le bit de poids faible, toujours 0, n'est pas stocké dans l'instruction. Quelle est approximativement la portée directe d'une instruction de branchement ?
  25. Quel est le fonctionnement correct de l'instruction RISC-V « jal ra, func » ?
  26. En quelle instruction la pseudo-instruction RISC-V « ret » est-elle réellement exécutée ?
  27. Quel est le principal objectif de la définition d'une convention d'appel (calling convention) ?
  28. Dans la convention d'appel standard de RISC-V, quels registres servent à transmettre les arguments entiers et la valeur de retour ?
  29. Dans la convention d'appel standard de RISC-V, lors de l'appel d'une fonction à 10 arguments entiers, où sont transmis les 9e et 10e arguments ?
  30. Dans la convention d'appel RISC-V, que signifie le fait que s0 à s11 soient des registres « sauvegardés par l'appelé » (callee-saved) ?
  31. Dans la convention d'appel RISC-V, t0 à t6 sont des registres « sauvegardés par l'appelant » (caller-saved). Si une fonction veut continuer à utiliser une valeur placée dans t0 après avoir appelé une autre fonction, quelle est la démarche correcte ?
  32. Dans une fonction qui n'appelle aucune autre fonction (fonction feuille), il n'est souvent pas nécessaire de sauvegarder ra sur la pile. Quelle en est la raison ?
  33. Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?
  34. La convention d'appel standard de RISC-V exige que le pointeur de pile sp soit un multiple de 16 octets à l'entrée d'une fonction. Quelle en est la raison la plus pertinente ?
  35. Le code ci-dessus est le début (prologue) d'une fonction. Que fait cette partie ?
  36. Quel est l'avantage d'utiliser un pointeur de cadre (s0/fp en RISC-V) dans une fonction ?
  37. En RISC-V, que se passe-t-il si l'on oublie de sauvegarder ra sur la pile en écrivant une fonction récursive qui s'appelle elle-même ?
  38. Sur un RISC-V little-endian, un registre contenant 0x12345678 est écrit à l'adresse 0x100 avec « sw ». Si l'on lit ensuite avec « lbu » l'octet à l'adresse 0x101, quelle est sa valeur ?
  39. En RISC-V, si l'adresse d'une instruction lw lisant 4 octets n'est pas un multiple de 4 (non alignée), que peut-il se passer ?
  40. Par combien le résultat t0 de l'instruction RISC-V « slli t0, a0, 3 » multiplie-t-il la valeur de a0 (sans tenir compte du débordement) ?
  41. a0 contient l'adresse de début d'un tableau a de type int (4 octets), et a1 l'indice i. Que charge le code ci-dessus dans a2 ?
  42. Quelle affirmation concernant les architectures où les instructions arithmétiques peuvent utiliser directement des valeurs en mémoire, comme l'instruction x86 « add eax, [rbx] », est correcte ?
  43. Quelle description de la manière dont les CPU x86 hautes performances actuels exécutent en interne les instructions complexes est correcte ?
  44. Quelles instructions l'extension M de RISC-V ajoute-t-elle au jeu d'instructions entières de base ?
  45. Quel est le principal objectif de l'extension C (instructions compressées) de RISC-V ?
  46. En compilant « a * b » (multiplication de deux int) en C pour un CPU RV32I sans extension M, que se passe-t-il généralement ?
  47. Quelle affirmation concernant le delay slot de branchement des anciens MIPS notamment (règle selon laquelle l'instruction suivant immédiatement un branchement est exécutée que le branchement soit pris ou non) est correcte ?
  48. Lors de l'exécution d'une instruction lw en RV64I (64 bits), comment la valeur de 32 bits lue est-elle placée dans le registre de 64 bits ?
  49. Quelle description de l'ABI (interface binaire d'application) est correcte ?
  50. En RISC-V, quelle instruction réalise généralement un appel par pointeur de fonction en C, « (*fp)(x) » ?

Autres thèmes de Systèmes informatiques