QCM Bases Assembleur

De Ensiwiki
Aller à : navigation, rechercher

1. Le langage d'assemblage est

Un langage directement exécutable par le processeur
Non, c'est un format textuel, proche du langage machine.
Un langage lisible par un humain
Pas forcément convivial, mais lisible (très lisible si on le compare au binaire ;-) )
Un langage de haut niveau

2. Physiquement, les registres sont

Des composants sur la carte mère d'un ordinateur
Une partie du processeur
Une partie séparée de la RAM

3. Le registre %ax est un registre

8 bits
16 bits
Plus précisément, il correspond aux 16 bits de poids faible de %eax
32 bits
Non, le registre 32 bits correspondant, c'est %eax

4. L'instruction movl %eax, %ebx ...

Déplace le contenu de %eax vers %ebx
Déplace le contenu de %ebx vers %eax
Copie le contenu de %eax vers %ebx
L'instruction mov porte assez mal son nom: movl %eax, %ebx ne modifie pas %eax
Copie le contenu de %ebx vers %eax
En syntaxe Intel, ça serait le cas (et du coup, on trouve des documentations qui mettent les opérandes dans cet ordre sur le net), mais pas avec la syntaxe GNU que nous utilisons.

5. Après avoir exécuté

movl $0x12345678, %eax
movl $0, %ah

le registre %eax contient la valeur

Non, on n'a écrit que dans les bits de %ah (i.e. les bits 15 à 8), les autres bits de %eax ne sont pas affectés.
0x12345600
Presque, on aurait eu ce résultat en écrivant dans %al
0x12340078
Tout à fait, les chiffres hexa 56 ont été écrasés par la deuxième écriture
0x78563412
Non, on peut avoir ce genre de résultat quand on s'emmêle les pinceaux avec des adresses d'octets (dans la plupart des cas, on ne voit pas l'endianness de la machine quand on programme), mais pas sur un registre. Si on écrit 0x12345678, la nouvelle valeur du registre est 0x12345678 ...

6. Le registre %eip contient:

L'instruction courante
L'adresse de l'instruction courante
Pas exactement : %eip est incrémenté au début de l'exécution de l'instruction, donc la plupart du temps il contient l'adresse de l'instruction suivante (sauf au moment précis du fetch, où il contient l'instruction courante, mais on n'y a pas accès à ce moment).
L'adresse de l'instruction suivante
Oui. %eip pointe sur l'instruction « suivante », c'est à dire celle qui sera exécutée après l'instruction en cours d'exécution. En général, c'est l'instruction qui suit immédiatement l'instruction courante dans le code, mais ça peut aussi être la destination d'un jmp ou d'un ret.

Votre pointage est 0 / 0