Bonjour
j'ai un exercice qui lit 5 nombres entiers et affiche le maximum d'entre eux dans la ligne qui suit.
J'ai essayé de faire la solution mais lors de l'exécution, quand je tape le nombre, il m'affiche "illegal command".
Bonjour
j'ai un exercice qui lit 5 nombres entiers et affiche le maximum d'entre eux dans la ligne qui suit.
J'ai essayé de faire la solution mais lors de l'exécution, quand je tape le nombre, il m'affiche "illegal command".
Il te faut mettre' des points d'arrêt pour voir ou ça coince.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Depuis un débogueur, un point d'arrêt stoppe le programme à l'endroit de ton choix et permet de voir le contenu des registres à ce moment.
Ça peut aussi se présenter sous la forme de code supplémentaire affichant un message "on est à tel endroit", ce qui permet de repérer ou se trouve l’erreur.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Bonjour,
Peut-on au moins voir le code, SVP ?
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
ouii bien sur
voici le code
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 pile segment para stack 'pile' db 256 dup (0) pile ends data segment nombre dw ? message db "entrez le premier nembre svp",'$' message2 db "entrez un autre nbr sv",'$' message3 db "le plus grand nombre est",'$' data ends code segment phrase proc far assume cs:code assume ds:data assume ss:pile mov ax,data mov ds,ax mov dx,offset message mov ah,9 int 21h mov ah,8 int 21h sub al,48 mov nombre,ax mov cx,4 boucle: mov dx,offset message2 mov ah,9 int 21h mov ah,8 int 21h CMP ax,nombre JG save save: sub al,48 mov nombre,ax loop boucle mov dx,offset message3 mov ah,9 int 21h mov dl,13 mov ah,2 int 21h mov dx,nombre add dx,48 mov ah,2 int 21h mov ah,4ch int 21h phrase endp code ends end phrase
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 pile segment para stack 'pile' db 256 dup (0) pile ends data segment nombre dw ? message db "entrez le premier nembre svp",'$' message2 db "entrez un autre nbr sv",'$' message3 db "le plus grand nombre est",'$' data ends code segment phrase proc far assume cs:code assume ds:data assume ss:pile mov ax,data mov ds,ax mov dx,offset message mov ah,9 int 21h mov ah,8 int 21h sub al,48 mov nombre,ax mov cx,4 boucle: mov dx,offset message2 mov ah,9 int 21h mov ah,8 int 21h CMP ax,nombre JG save save: sub al,48 mov nombre,ax loop boucle mov dx,offset message3 mov ah,9 int 21h mov dl,13 mov ah,2 int 21h mov dx,nombre add dx,48 mov ah,2 int 21h mov ah,4ch int 21h phrase endp code ends end phrase
Bonjour Hannal,
- affiche "message" avec la fonction 9h de l'interruption 21h
- attend une touche au clavier avec la fonction 8h de l'interruption 21h
- enlève 48 au code ascii de la touche
- place cette valeur (plus la valeur parasite contenue dans AH) dans "nombre"
- debut de boucle (effectuée 4 fois) ------------------------------
affiche "message2"
attente d'une touche
compare le code ASCII + valeur parasite contenue dans AH avec la valeur contenue dans "nombre"
si cette valeur est plus grande, saute au label "save" sinon... continue sur le label
enlève 48 au code ascii de la touche contenu dans AL
place cette nouvelle valeur + valeur parasite de AH dans "nombre"
Fin de Boucle --------------------------------
- affiche "message3"
- retourne au début de la ligne avec le code ASCII 13 (sans passer à la ligne suivante)
- affiche le code ASCII contenu dans "nombre"+48
- termine le programme
En même temps, il suffit de le compiler pour voir non ?
Voici quelques considérations sur le code.
Tout d'abord, la déclaration de la procédure est superflue. La structure de ton segment de code peut être simplifiée en :
Comme tu lis un seul caractère (un seul octet) au clavier, qui est stocké dans le registre dl, il n'y a pas de raison de déclarer la variable nombre comme mot :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 code segment phrase: mov ax,data mov ds,ax [ . . . ] code ends end phrase
Il y a un souci au niveau du test, dans la boucle : tel que tu l'écris, l'octet lu est sauvé dans tous les cas, même s'il n'est pas plus grand que la variable nombre. Le test devrait être remplacé par quelque chose comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part nombre db ? ; db au lieu de dw
Ainsi, si l'octet lu n'est pas plus grand que nombre, alors on saute la sauvegarde et on boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 boucle: [ . . . ] cmp ax,nombre ; al, si nombre est déclaré comme octet jng suite sub al,48 mov nombre,ax ; al (même remarque) suite: loop boucle
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
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