Beruflich Dokumente
Kultur Dokumente
Module N3
I-INTRODUCTION:
est le langage de programmation de plus bas
niveau. Cela signifie quil est trop proche du
matriel, qui oblige le programmeur se soucier de
concepts proches du fonctionnement de la
machine, comme la mmoire.
transforme un fichier source contenant des
instructions, en un fichier excutable que le
processeur peut comprendre.
Les programmes faits en ASM sont plus petits, plus
rapides et beaucoup plus efficaces que ceux fait
avec des compilateurs
Langage humain
Compilation
Langage Assembleur
Assemblage
Un registre de flag
Il contient des bits qui ont chacun un rle indicateur.
REGISTRE EAX
EAX(32 bits)
AX(16 bits)
AH(8bits)
AL(8bits)
JEU DINSTRUCTIONS
Dcrit lensemble des oprations lmentaires que le
microprocesseur pourra excuter.
Transfert de donnes: charger ou sauver en
mmoire (mov , )
Oprations arithmtiques (add ,mul ,div , )
Oprations logiques( and ,or , )
Contrle de squence :
- Branchement (jmp, )
- Test (cmp,)
7
DCLARATION DE VARIABLES
Les variables se dclarent de la manire suivante:
datas1 db ? ; datas1 est un byte non initialis
datas2 db 0FFh ; datas2 est un byte initialis FF (255 en hexadcimal)
datas3 dw ? ; datas3 est un word (16 bits)
datas4 db 5 dup (?) ; datas4 est un tableau de 5 bytes non initialiss
datas5 dw 10 dup (15) ; datas5 est un tableau de 10 byte initialiss 15
De manire gnrale:
DB
: 1 byte (8 bits) (Declare Byte)
DW
: 1 word (16 bits) (Declare Word)
DD
: 2 words (32 bits) (Declare Double)
DF,DP
: 6 bytes
DQ
: 8 bytes (64 bits)
DT
: 10 bytes
Les constantes peuvent tre crites en:
- dcimal: 1, 2, 3, 123, 45
- hexadcimal : 1h,2h,3h,12h,0Fh,0AD4h (noter la prsence du 0 quand le le
premier
chiffre du nombre en hexadcimal commence par une lettre)
- binaire : 1b,0b,1010b,111101b
8
Directives de base
Type
de processeur
du programme
.code
Appel
invoke
; appelle fonction(a, b, c)
Le rsultat d'une fonction est toujours dans al, ax ou eax, selon que la taille du
rsultat est 8, 16 ou 32 bits.
10
11
12
13
mov
L'instruction la plus utilise est l'instruction mov, qui copie la valeur
d'un oprande source dans un oprande destination. La syntaxe est
la suivante :
movzx ax, bl
movsx ax, bl
-> ax = 0094
-> ax = FF94
movzx eax, bl
movsx eax, bl
15
Incrmentation
INC AX
; AX <- AX + 1
Inc ma_variable
Dcrmentation
DEC AX
Dec ma_variable
Addition
ADD AX, 5
; AX <- AX + 5
ADD BH, toto
; BH <- BH + toto
Add toto, Cx
; toto <- toto + Cx
Soustraction
SUB AX, 5
; AX <- AX 5
SUB BH, toto
; BH <- BH toto
SUB toto, CX
; toto <- toto CX
Multiplication
Mul BX
; AX <- BH * AX
Division
div BX
; AX <- BH / AX
16
OR bit bit
17
INSTRUCTION
LEA
lea
V- LA PILE
Une pile est une zone de mmoire dans laquelle on peut stocker
temporairement des registres. Il s'agit d'un moyen d'accder
des donnes en les empilant. Ainsi il est ncessaire de dpiler
les valeurs stocker au sommet (les dernires avoir t
stockes) pour pouvoir accder aux valeurs situes la base
de la pile.
La pile est de type LIFO (Last In First Out), c'est--dire que la
premire valeur empile sera la dernire sortie
Les instructions PUSH et POP
Les instructions PUSH et POP sont les instructions qui servent
empiler et dpiler les donnes.
- PUSH registre met le contenu du registre dans la pile
(empilement)
- POP registre rcupre le contenu de la pile et le stocke dans le
registre (dpilage)
19
POP AX
rcupre le contenu du sommet de la pile et le
transfre dans AX.
20
LES PROCDURES-FONCTIONS
La notion de procdure - fonctions
En langage assembleur, on appelle procdure
un sous-programme qui permet d'effectuer un
ensemble d'instructions par simple appel de la
procdure.
Les fonctions et les procdure permettent
d'excuter dans plusieurs parties du
programme une srie d'instruction, cela permet
une simplicit du code et donc une taille de
programme minimale.
21
22
VI- LE BRANCHEMENT :
LE REGISTRE FLAG
Les bits de cet ensemble sont appels "indicateurs".
Les instructions arithmtiques, logiques et de
comparaison modifient la valeur des indicateurs.
Les instructions conditionnelles testent la valeur des
indicateurs et agissent en fonction du rsultat.
Les bits les plus importants:
-ZF : Zero Flag - Indicateur zro
Si le rsultat d'une opration est nul (gal 0) ZF
passera 1.
-SF : Sign Flag - Indicateur de signe
SF passe 1 quand le rsultat est ngatif.
-CF : Carry Flag - Indicateur de retenue
CF=1 s'il y a une retenue de gnre, sinon CF = 0,
23
Instructions de comparaison
CMP destination, source
FIN:
(ne pas oublier les : )
25
26
La condition : if
MOV AL, op1
MOV BL, op2
; ou autres registres
CMP AL, BL ou BL, AL
J?? vrai
; instructions du cas_faux
JMP fin
vrai:
; instruction du cas_vrai
fin:
o J?? est un des branchements possibles (JZ, JNZ, JS ou JNS) en
fonction de la condition :
condition
traduction
explication
op1 = op2
CMP AL, BL puis JZ ...
op1-op2 = 0
op1 != op2
CMP AL, BL puis JNZ ...
op1-op2 != 0
op1 < op2
CMP AL, BL puis JS ...
op1-op2 < 0
op1 > op2
CMP BL, AL puis JS ...
op2-op1 < 0
op1 >= op2
CMP AL, BL puis JNS ...
op1-op2 >= 0
op1 <= op2
CMP BL, AL puis JNS ...
op2-op1 >= 0
27
28
; compteur i
re:
CMP registre2, registre1
JS fin
; limite-compteur<0 c'est dire
; compteur>limite
bloc__rpter
INC registre1
; incrmentation de i
JMP re
fin:
29
tab
ESI
0534FA40h
11
12
3
30
.data
tab dd 11,12,13
ele dd 0
espace db " ",0
.code
start:
lea esi,tab
mov ebx,0
pour:
cmp ebx ,3
jns fin
inc ebx
mov eax, [esi]
invoke dwtoa , eax,ADDR ele
invoke StdOut ,ADDR ele
invoke StdOut ,ADDR espace
add esi,4
jmp pour
fin:
ici: jmp ici
end start
31