Salut à tous
1. Je veux savoir comment j'affiche ce résultat en TASM (16 bits) :
la somme = 1400 ?
2. Comment afficher l'état des flags avec DEBUG (dos)
Merci d'avance
Salut à tous
1. Je veux savoir comment j'affiche ce résultat en TASM (16 bits) :
la somme = 1400 ?
2. Comment afficher l'état des flags avec DEBUG (dos)
Merci d'avance
Ce programme affiche deux nombres :
Mais quand BH contient par exemple 1458, comment j'affiche le résultat ? Je crois qu'on utlise loop mais comment ?
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 code segment main proc assume cs:code mov bh,36 ; bh = 36 mov bl,0 ; bl = 0 xx: sub bh,10 ; bh = bh - 10 inc bl ; bl = bl + 1 cmp bh,9 ; compare bh with 9 jg xx ; If bh > 9 then goto xx mov dl,bl add dl,30h mov ah,02h int 21h mov dl,bh add dl,30h int 21h mov ah,4ch int 21h main endp code ends end main
Salut,
BH ne peut pas contenir de valeur supérieure à 255 (sur n bits on peut seulement coder 2^n choses). Pour afficher son contenu tu peux faire une boucle qui le divise par 10 jusqu'à ce qu'il soit égal à zéro. A chaque fois le reste sera égal au caractère de droite, donc il faudrait les stocker tous et les réafficher en sens inverse. Voilà un exemple en utilisant la pile :
Pour voir les flags principaux dans Debug, utilise "r f". Un tutoriel ici : http://www.gamedev.net/reference/art...article215.asp
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 mov al, 255 ; nombre à afficher mov bh, 10 ; base dans laquelle le nombre est converti ; On marque la fin du nombre avec un zéro push 0 boucle_div: ; Division par 10 (AL contient le quotient, AH le reste) xor ah, ah div bh ; Sauvegarde du reste (et du quotient dans AL) push ax ; Tant que le quotient est différent de zéro, on boucle test al, al jnz boucle_div boucle_aff: pop ax test ah, ah jz fin mov dl, ah or dl, 30h ; conversion en caractère ASCII mov ah, 02h int 21h jmp boucle_aff fin:
:wq
Voilà un exemple qui stocke la représentation du nombre dans une chaîne (en syntaxe MASM).
La même chose avec loopnz (loop if not zero) :
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 .Data nb db " $" .Code main proc mov ax, @data mov ds, ax mov es, ax mov al, 255 ; nombre à afficher mov bh, 10 ; base dans laquelle le nombre est converti mov si, offset nb + 2 boucle_div: ; Division par 10 (AL contient le quotient, AH le reste) xor ah, ah div bh ; Stockage du reste dans la chaîne or ah, 30h ; conversion en caractère ASCII mov [si], ah sub si, 1 ; Tant que le quotient est différent de zéro, on boucle test al, al jnz boucle_div ; Affichage de la chaîne qui représente le nombre mov dx, offset nb mov ah, 09h int 21h ; Attente d'une touche mov ah, 01h int 21h ; Fin du programme mov ax, 4C00h int 21h main endp end main
Attention loopnz fera boucler jusqu'à ce que le reste ou ECX soit égal à zéro. Par contre si ECX est nul dès le départ il faudra 2^32 itérations pour qu'il revienne à zéro, c'est pour ça que j'ai mis le xor ecx, ecx.
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 .Data nb db " $" .Code main proc mov ax, @data mov ds, ax mov es, ax mov al, 255 ; nombre à afficher mov bh, 10 ; base dans laquelle le nombre est converti mov si, offset nb + 2 xor ecx, ecx boucle_div: ; Division par 10 (AL contient le quotient, AH le reste) xor ah, ah div bh ; Stockage du reste dans la chaîne or ah, 30h ; conversion en caractère ASCII mov [si], ah sub si, 1 ; Tant que le quotient est différent de zéro, on boucle test al, al loopnz boucle_div ; Affichage de la chaîne qui représente le nombre mov dx, offset nb mov ah, 09h int 21h ; Attente d'une touche mov ah, 01h int 21h ; Fin du programme mov ax, 4C00h int 21h main endp end main
:wq
merci beaucoup dapounet de votre aide
J'aurais peut-être dû te laisser mariner un peu mais ça ne peut pas faire de mal à un débutant de savoir afficher ses nombres. Maintenant tu devrais faire des macros qui affichent un byte, un word ou un dword, ce sera beaucoup plus pratique que de faire des copier-coller à chaque fois.
:wq
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager