IUT de Montreuil - D´epartement Informatique 2016-2017
–eax, ebx, ecx, edx (32 bits)
–ax, bx, cx, dx (16 bits)
–dh, dl, ch, cl, bh, bl, ah, al (8 bits)
Un programme en assembleur peut acc´eder directement `a ces registres. Pour distinguer d’un registre
d’une ´etiquette on le fait pr´ec´eder par un %.
1.5 Modes d’adressage
– L’adressage imm´ediat (constante) : pour introduire une valeur en une base num´erique
Exemple : movb $10, %al : copie la valeur 10 dans le registre “al”
– L’adressage direct : pour acc´eder au contenu d’une variable.
Exemple : movb var1, %al : copie dans “al” le contenu d’un octet de la variable “var1”
– L’adressage registre : pour acc´eder au contenu d’un registre.
Exemple : movb $10, %al
– L’adressage indirect : pour r´ecup´erer l’adresse d’une case m´emoire ou le contenu d’une zone de
m´emoire point´ee par un registre
Exemple :
–movq $var1, %rsi : copie dans “rsi” l’adresse de la case m´emoire associ´ee `a la variable “var1”
–movw (%rsi), %ax : copie dans “ax” le contenu de deux octets de la zone de m´emoire dont l’adresse
est indiqu´ee par “rsi”
1.6 Affichage
Pour afficher un caract`ere ou une chaˆıne de caract`eres en assembleur, on peut faire appel `a l’interruption
int 0x80 de Linux.
.data # zone de donn´ees
var:
.byte 65 # le code d’ascii de A
.string "Bonjour!" # chaine de caract`eres
.text # zone de code
.globl main
main:
movq $4, %rax # pour ´ecrire
movq $1, %rbx # stdout
movq $var, %rcx # l’adresse de la chaine
movq $8, %rdx # le nb de carac. `a afficher
int $0x80 # interruption de Linux pour l’affichage
ret
Exercice 1
Parmi les propositions suivantes, lesquelles sont correctes et pourquoi ?
1. %bh, %bl sont des registres d’une capacit´e de 8 bits
3 / 5