Votre question

[ASM] Résultat d'execution bizarre

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
14 Octobre 2006 00:29:48

Bonjour. Je souhaite faire un programme en assembleur très simple (8086) qui :
1/ Met le mode 25x40 en 16 couleur
2/ Positionne le curseur en 10 colonne et 12 eme ligne
3/ Affiche trois $ à la suite càd : ('$$$') en rouge sur cyan clair

Or, Lors de l'execution, il me place bien les $$$, mais en place trois autre ailleurs, et je ne sais vraiment pas pourquoi !!!

Voici mon code, très facile a lire, très bien commenté :

; Programme 1
DOSSEG
.8086
.model small
.stack 100h
.data

.code
; Fonction indispensable à la lecture des variables (segment de données .data)
mov AX,@data
mov DS,AX

; Modification du mode vidéo en 25x40 en 16 couleurs
mov AX,0001h ; AH=00h pour la sous-fonction 00h et AL=01h pour le 25x40x16
int 10h ; Appel de l'interruption 10h

; Fonction de positionnement du curseur
mov AH,02h
mov DX,0C0Ah
mov BH,0
int 10h

; Fonction d'affichage de trois $$$ rouge sur fond cyan clair
mov BH,00h
mov CX,03h ; Nombre d'occurence du caractère, ici, 3
mov AL,36 ; Code ASCII du caractere '$' (décimal)
mov AH,09h ; Sous-fonction 09h
mov BL,0B4h ; Couleur du fond (B=cyan clair) et du texte (4=rouge)
int 10h ; Appel de l'interruption 10h

; Fonction d'arret du programme
mov AH,4Ch
int 21h ; Appel du DOS pour arreter le programme
END

Merci !

Autres pages sur : asm resultat execution bizarre

a b L Programmation
14 Octobre 2006 09:02:05

J'ai testé ça sous DEBUG, parce que tout m'a l'air correct.

Si tu ajoutes une attente d'appui de touche juste avant la fin du programme:
MOV AH, 07h
IN 21h

ça fonctionnera bien.
Tu remarqueras que la résolution n'est pas tout à fait la même. En fait, c'est quand ça quitte que ça rechange de résolution (80 colonnes). Tu mets les '$' à un certain offset de la mémoire video, et l'interprétation est différente selon la résolution.
15 Octobre 2006 19:21:01

Merci Crick !!!

Mais dis moi ya quelques questions que j'aimerais te poser, car je debute en asm moi (ca doit se voir lol)...

1/ Tu m'as dit de mettre [mov AH,07h et int 21h] pour attendre l'appui de touche. Or, moi, sur mon cours, notre prof nous a dit de mettre : [mov AH,00h et int 16h] !!! C'est completement une autre interruption qui est appellée là !! Et pourtant meme resultat ?!

2/ Est ce que, quand tu lis un programme, tu as besoin des commentaires, ou est ce que direct dans ta tete tu vois ce que ca fait ? Car moi si j'ai pas le bouquin a coté de moi, pour lire un programme j'en chie!!

Sinon, encore merci !!!
Contenus similaires
Pas de réponse à votre question ? Demandez !
15 Octobre 2006 19:32:38

Ah tiens ! Je m'appercois aussi que lors de la premiere execution, le programme s'affiche mal, mais bien les fois suivante avec ta technique...
L'assembleur est plein de mystere !
a b L Programmation
15 Octobre 2006 20:45:46

1/ l'interruption 21h est l'interruption DOS (comme le marqueur de fin de programme DOS), c'est une interruption logicielle mise en place par l'OS DOS et windows. Pour linux, les interruptions logicielles de l'OS sont mises à 80h.
L'interruption 16, c'est l'interruption de lecture de clavier.

En fait il y a une différence : int 21/fct 07 lit en fait le périphérique d'entrée standard. Comme on peut rediriger l'éntrée standard à partir d'un fichier, ça peut aussi lire le fichier.
int 16/fct 0 lit directement le clavier (d'ailleurs ça retourne les codes des touches).
Après, tu utilise celui que tu veux ;) 

2/ Que ce soit en assembleur ou autre langage il faut des commentaires expliquant en gros ce que ça fait. Les commentaires que tu as faits sont biens.
En assembleur c'est normal d'avoir un bouquin, surtout pour avoir la liste des fonctions et interruptions (ça sert à rien de les apprendre, car si tu changes de processeur, tu changes de jeux d'instructions). Et si professionellement, tu es amené à programmer en assembleur, ça ne sera probablement pas pour des processeurs intel ;) 
Personellement, j'utilise la bible du PC programmation système (pas la dernière édition), bien pratique :) 

3/ Exécute ton programme en plein écran, pacre que c'est plus du DOS que du windows ;) 
17 Octobre 2006 19:09:40

ok ah c'est genial ! merci !!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS