Bonjour ,
je voudrais savoir à quoi servent
les mots "equ" et "dup" et comment on s'en sert ?!
Merci par avance.
Bonjour ,
je voudrais savoir à quoi servent
les mots "equ" et "dup" et comment on s'en sert ?!
Merci par avance.
Bonjour,
Pour equ (qui signifie "equate") il s'agit ni plus ni moins de dire au programme assembleur (plus exactement à son préprocesseur) qu'un token possède une valeur spécifique.Envoyé par SimpleMe
Pour faire un parallèle avec le C ou le C++ il s'agit ni plus ni moins que d'un #define.
exemple (syntaxe MASM):
Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 .686p .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive .const ; constante Foo equ 42 ; Foo vaut 42 TRUE equ 1 ; TRUE vaut 1 FALSE equ 0 ; FALSE vaut 0 Calc equ 6.1 + 0.9 ; Calc vaut 7.0 (l'expression est évaluée !) Bla equ '0' ; Bla vaut le caractère '0' (soit 0x30) Bla2 equ <Bla> ; (String Equate) Bla2 vaut Bla => Bla2 vaut '0' .code start: ; le préprocesseur remplace FALSE par 0 ; ce qui revient à : mov eax, 0 mov eax, FALSE ; mov ebx, 1 mov ebx, TRUE ; cmp edx, 42 cmp edx, Foo ; mov esi, 30h mov esi, Bla ; mov edi, 30h mov esi, Bla2 end start
--------------
En ce qui concerne dup (pour "duplicate"), cela consiste à dupliquer (répéter un certains nombre de fois) une valeur.
Imaginons que je veuille remplir un tableau statique avec 256 fois l'octet 0x42. Plutôt que d'écrire 256 fois l'octet 0x42, je peux le faire avec dup :
Code Asm : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 .686p .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive .data ; données initialisées Tableau BYTE 256 dup (42h) ; Tableau est un tableau de 256 octets initialisés à 0x42. Array BYTE 4 dup(30h, 31h) ; Tableau d'octets : 4 fois 0x30 , 0x31 ; vaut : ; Array BYTE 30h, 31h, 30h, 31h, 30h, 31h, 30h, 31h .data? ; données non initialisées UnInitArray DWORD 20 dup (?) ; UnInitArray est un tableau non-initialisé de 20 double mots (par défaut chaque double mot est initialisé à 0).
Merci beaucoup pour tes explications !![]()
ca veut dire quoi ".686p"?
les petits points en début de ligne sont indispensables ?
Bonjour,
C'est une directive processeur de MASM.Envoyé par SimpleMe
- 686 indique que l'on peut utiliser le jeu d'instruction des processeurs x86 686 (les derniers en date donc).
- le "p" indique que l'on peut utiliser les instructions privilégiées.
Oui (nécessaire seulement pour certaines directives), sinon l'assembleur (le programme d'assemblage) ne comprendra pas les directives.les petits points en début de ligne sont indispensables ?
d'accord, j'ai compris
merci encore pour tes explications![]()
Partager