begin process at 2010 03 18 18:23:27
  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*[( petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi Ancien code - CreateWindowEx ne fonctionne pas [ par TehWan ] Je ne comprends vraiment pas pourquoi CreateWindowEx ne fonctionne pas. Je code en ancien code avec MASM32. J'ai même essayé la nouvelle syntaxe (invo erreur compilation [ par greg4 ] je voudrai compiler--------------------------------------.model tiny.dataHelloMessage db 13,10,'Hello World !',13,10,'$'.codeorg 100hstart: mov ax,@d loader problème de code [ par TRAX44 ] salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche Problème d'adresse effective [ par Ihlianov ] Hi,J'ai un problème avec NASM, qui me rend cinglé.Je code un .Com (16 bits) et il me revoit une erreur sur l'instruction suivante : mov ax, [d probleme de conversation de hexa en ascii [ par wapiti ] voici le programme qui converti du binaire en ascii.model small.stack;-------------------------------------------------------------------------------- Conversion hexa vers ascii [ par Cygace ] Bonjour voici un code asm qui convertit un nombre binaire vers de l'ascii. Mais je dois modifiier ce code pour qu'il convertisse de l'hexadecimal vers lecture / ouverture d'un fichier txt en assembleur [ par rana ] est ce quelaqu un pourrait m aider a corriger ma macro de lecture d'un fichier txt et l'ouverture d'un fichier txt, voila les macro (pb au niveau du rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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,452 sec (4)

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