begin process at 2012 02 07 09:05:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Newbii

 > 

probleme affichage cadre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme affichage cadre

jeudi 10 février 2005 à 15:36:27 | probleme affichage cadre

jo_benni

Salut à tous, voilà je débute en assembleur et j'ai fait un petit programme exe qui affiche une succession de cadre de plus en plus grand. Le probleme c que lorsque la longueur d'un côté du carré dépasse 255, ca affiche n'importe quoi ! j'ai essayé de parer à ce problème mais sans succès. Je vous laisse juger par vous-même.  Si quelqu'un pouvais résoudre ce problème, ca serai cool!

Merci

ps :  j'utilise tasm


-------------------------------------------------------

.386

code segment use16

assume cs:code, ds:data, ss:pile


debut:

mov ax, data
mov ds, ax

;passage au mode video (640x480)
mov ah, 00h
mov al, 12h
int 10h

mov ax, 0
push ax

répétition_cadre:
 
  pop ax
  push ax
  sub x1, ax
  sub y1, ax
 
  mov dl, 2
  mul dl
  add word ptr ds:[longueur], ax

  push x1 y1 0 2     ;dessine un carré   (x, y, orientation, couleur)
  call dessine
 
  push x1 y1 1 2
  call dessine
 
  pop ax
  push ax
  add y2, ax
  push x1 y2 0 2
  call dessine

  pop ax
  push ax
  add x3, ax
  sub y3, ax
  push x3 y3 1 2
  call dessine
 
  add compteur, 01d
 
  pop ax
  push ax
  cmp ax, 0
  jne ajout_pas_5
 
  pop ax
  add ax, 5
  push ax
 
  ajout_pas_5:
    cmp compteur, 26
    jne répétition_cadre

;attente frappe touche
frappe:
  mov ah, 01h
  int 16h               ;vérifie le buffer pour voir si une touche du clavier a été enfoncée
  je frappe           ;si buffer vide, on attend une frappe
  mov ah, 00h     ;sinon on vide le buffer
  int 16h

;retour au mode text
mov ah, 00h
mov al, 00h
int 10h

;arrêt programme
mov ah, 4ch
int 21h

 

dessine proc near
  ;sauvegarde adresse début pile
  mov bp, sp

  mov ah, 0ch
  mov al, ss:[bp+2]   ;couleur
  mov cx, ss:[bp+8]   ;x
  mov dx, ss:[bp+6]   ;y
  int 10h
 
  mov bl, ss:[bp+4]   ;orientation
  cmp bl, 1
  je trait_vertical
 
 
  trait_horizontal:
    mov bx, ds:[longueur]
    boucle_h:
      dec bx
      inc cx
      int 10h
      cmp bx, 0
      jne boucle_h
      jmp fin_dessine
 
  trait_vertical:
    mov bx, ds:[longueur]
    boucle_v:
      dec bx
      inc dx
      int 10h
      cmp bx, 0
      jne boucle_v
     
  fin_dessine:
    ret 8
dessine endp

code ends


data segment use16
  x1 dw 315
  y1 dw 235
  y2 dw 245
  x3 dw 325
  y3 dw 235
  longueur dw 10
  compteur db 0
 
data ends


pile segment stack

remplissage dw 256 DUP (?)

pile ends

end debut

vendredi 11 février 2005 à 10:54:00 | Re : probleme affichage cadre

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

regarde tes mouvements de pile.

@++
vendredi 11 février 2005 à 14:15:38 | Re : probleme affichage cadre

jo_benni

Ben j'ai modifié mon programme en me servant d'une variable interval_cadre que j'ai du déclarer en "dw" et pas en "db"  - je sais pas pourquoi lol - pour éviter tous ces pop ax push ax !

Ca marche toujours pas, je sais pas quoi faire, ca vient peut être de l'interruption 10h mais normalement non puisqu'elle se sert des registres cx et dx pour les coordonées des points !

Si quelqu'un trouve une solution...

----------------------------------------------------------------------------------------

.386

code segment use16

assume cs:code, ds:data, ss:pile


debut:

mov ax, data
mov ds, ax

;passage au mode video (640x480)
mov ah, 00h
mov al, 12h
int 10h

répétition_cadre:
  mov ax, ds:[interval_cadre]
  sub word ptr ds:[x1], ax
  sub word ptr ds:[y1], ax
  mov dl, 2
  mul dl
  add word ptr ds:[longueur], ax

  push x1 y1 0 couleur     ;dessine un carré   (x, y, orientation, couleur)
  call dessine
 
  push x1 y1 1 couleur
  call dessine
 
  mov ax, ds:[interval_cadre]
  add word ptr ds:[y2], ax
 
  push x1 y2 0 couleur
  call dessine
 
  mov ax, ds:[interval_cadre]
  add word ptr ds:[x3], ax
  sub word ptr ds:[y3], ax
  
  push x3 y3 1 couleur
  call dessine
 
  add byte ptr ds:[compteur], 01d
 
  cmp interval_cadre, 0
  jne ajout_pas_5
 
  add word ptr ds:[interval_cadre], 5
 
  ajout_pas_5:
    cmp compteur, 26
    jne répétition_cadre

;attente frappe touche
frappe:
  mov ah, 01h
  int 16h            ;vérifie le buffer pour voir si une touche du clavier a été enfoncée
  je frappe          ;si buffer vide, on attend une frappe
  mov ah, 00h        ;sinon on vide le buffer
  int 16h

;retour au mode text
mov ah, 00h
mov al, 00h
int 10h

;arrêt programme
mov ah, 4ch
int 21h



dessine proc near
;sauvegarde adresse début pile
  mov bp, sp

  mov ah, 0ch
  mov al, ss:[bp+2]   ;couleur
  mov cx, ss:[bp+8]   ;x
  mov dx, ss:[bp+6]   ;y
  int 10h
 
  mov bl, ss:[bp+4]   ;orientation
  cmp bl, 1
  je trait_vertical
 
 
  trait_horizontal:
    mov bx, ds:[longueur]
    boucle_h:
      dec bx
      inc cx
      int 10h
      cmp bx, 0
      jne boucle_h
      jmp fin_dessine
 
  trait_vertical:
    mov bx, ds:[longueur]
    boucle_v:
      dec bx
      inc dx
      int 10h
      cmp bx, 0
      jne boucle_v
     
  fin_dessine:
   
    ret 8
dessine endp

code ends


data segment use16

  x1 dw 315
  y1 dw 235
  y2 dw 245
  x3 dw 325
  y3 dw 235
  longueur dw 10
  compteur db 0
  interval_cadre dw 0
  couleur dw 2
 
data ends


pile segment stack

remplissage db 256 DUP (?)

pile ends

end debut

-------------------------------------------------------------------------------------------


Cette discussion est classée dans : mov, dessine, ax, push, dw


Répondre à ce message

Sujets en rapport avec ce message

probleme pour un petit programme [ par djorb8 ] Bonjour a tous, je debute en assembleur et pour mes cours je doit realiser un petit programme pour calculler un volume dont voici la formule : pi*h*[( débutant besoin d'aide sur programme ... [ par babar34fr ] Bonjour a tous je vient vers vous afin d'avoir un peu d'aide , Débutant en asm , j'ai télécharger le logicie w32dasm ( en parlant de celui-ci , est-ce verification d'un code [ par marooh ] Bonjour, j'ai écrit un code assembleur qui consiste à créer un tableau de 20 cases , de les remplir,de trouver le maximum et de faire la moyenne.mais Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les Erreur bizarre : MessageBox affiche du texte en japonais [ par epineurien ] Bonjour à tous !J'ai quelques problêmes avec visual studio C++. Quand j'utilise une MessageBox le texte apparait ... en japonais. J'ai désactivé le su Addition ASM [ par GibsonUSA ] Bonjour a tous, je débute en ASM 16bits et je bloque pour faire une addition de deux chiffres saisis par l'utilisateur. Voila ce que j'ai fais. A l' Executer 2 action en meme temps [ par HirOinEvOl ] Bonjour, je souhaite exécuter les deux codes suivant mais simultanément pour qu'ils puissent tournés en parrallèles. Je n'ai trouvé aucun moyen de l correction d'un code assembleur [ par marooh ] Bonjour, j'ai ce code assembleur qui permet la creation d'un tableau de 10 cases et les remplir avec le chiffre 5.en l'utlisant avec tasm,il s'avère chaine de caractères [ par jijij ] salut, je veux écrire un programme capable de saisir une chaine de caractères la lecture doit s'arreter à la rencontre du "#" code: Title chaine .mode


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales