ISA et assembleur

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 ?

  1. A0x34
  2. B0x56
  3. C0x78
Afficher la réponse et l'explication

Réponse : B. 0x56

En little-endian, les octets de poids faible de la valeur sont placés en premier aux adresses les plus basses. Pour 0x12345678, 0x100 contient 0x78, 0x101 contient 0x56, 0x102 contient 0x34 et 0x103 contient 0x12. L'octet à 0x101 vaut donc 0x56. En big-endian, l'ordre serait 0x12, 0x34, … à partir de 0x100, et 0x101 contiendrait 0x34. Il faut tenir compte de cette différence lors du traitement de formats réseau ou de fichiers.

S'entraîner sur ce thème Retour au thème

Autres questions sur ISA et assembleur

  1. 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 ?
  2. 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) ?
  3. 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 ?
  4. 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 ?
  5. Quelle description de la manière dont les CPU x86 hautes performances actuels exécutent en interne les instructions complexes est correcte ?