salut tout le monde
D'abord je tiens à féliciter Benoît-M pour son tutoriel pour apprendre l'assembleur, il est parfait.
Une fois j'ai lu le Tutoriel j'ai voulu faire les exercices proposés, mais comme je suis débutante en assembleur il y a certaines instructions dont j'arrive pas à comprendre l'intérêt. Par exemple, dans l'exercice où il s'agit de tester si un nombre positif est premier :
A vrai dire j'ai compris le principe et toutes les instructions mais je ne vois pas l'utilité de mettre le registre flag et les autres registres géneraux dans la pile ensuite les restaurer vers la fin, quelle en est l'utilité ?
Code : 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
39
40
41
42
43
44
45
46
47
48
49
50
51 Procédure qui dit si un nombre positif (passé dans AX) est premier comment * Procédure qui dit si un nombre positif est premier Paramètres : AX = nombre à tester Résultat : AX = 1 si le nombre est premier et 0 sinon * test_prem proc near .386 pushf ;sauvegarde des flags pusha ;sauvegarde des reg. généraux push ds ;sauvegarde de DS cmp ax, 2 ;le nombre est-il < 2 ? jb TPnon_premier ;oui ? alors pas premier ! je TPpremier ;si = 2 alors premier ! push cs ;mettre cs pop ds ; dans ds mov word ptr ds:[TPsto_nombre], ax ;stocker le nombre à tester mov bx, 2 ;on va le diviser par 2 TPprochaine_div: xor dx, dx ;mettre DX à 0 pour la division div bx ;diviser DX:AX par BX cmp dx, 0 ;pas de reste ? je TPnon_premier ;non ? alors pas premier ! mov ax, TPsto_nombre ;restaurer le nombre dans AX inc bx ;on va diviser par le suivant cmp bx, ax ;si nouveau diviseur >= nombre jae TPpremier ; alors le nombre est premier ! jmp TPprochaine_div ;sinon recommencer ! TPnon_premier: pop ds ;restauration de DS popa ;restauration des reg. généraux popf ;restauration des flags mov ax, 0 ;le nombre n'était pas premier jmp TPfini TPpremier: pop ds ;restauration de DS popa ;restauration des reg. généraux popf ;restauration des flags mov ax, 1 ;le nombre était premier ;-) TPfini: ret ;retour à l'appelant ;********** données ici ********** TPsto_nombre dw ? ;pour garder le nombre à tester test_prem endp
Ensuite pourquoi on a mis le registre CS dans la pile et on l'a mis dans DS ? ça sert à quoi s'il vous plait ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 push cs ;mettre cs pop ds ; dans ds
Merci beaucoup d'avance pour votre aide .
Partager