IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

[TASM] Comment tracer une ligne ?


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 17
    Points
    17
    Par défaut [TASM] Comment tracer une ligne ?
    bonjour
    comment tracer une ligne droite avec TASM d'une longueur de 150 pixel
    en mode video

    merci

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    commencer par activer le mode video avec

  3. #3
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Hello,

    Ok, c'est en mode 13h donc 320x200 en 256 couleurs ... le mode le plus fastoche

    Ta ligne de 150 points, elles est horizontale ? verticale ? diagonale ?

    Je ne sais pas où tu en es, alors je vais revoir tout rapidement depuis le début.

    l'écran graphique fait 320x200 points donc 64000 octets
    Le segment vidéo est A000h
    Le point en haut à gauche est à l'adresse 0000h
    Le point en bas à droite est à l'adresse F9FFh

    Pour calculer l'adresse d'un point si tu as ses coordonnées X,Y
    X+Y*320 (c'est un tableau en somme)

    Exemple : afficher un point en X=34 Y=80
    34+80*320 = 25634 = 6422h

    Lors de l'initialisation, le mode VGA utilise une palette de couleurs standard.
    Dans cette palette, le rouge correspond à 40

    petit bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mov ax,13h
    int 10h
    mov ax,0A000h
    mov es,ax
    mov bx,6422h
    mov al,40
    mov es:[bx],al
    et voila !

    a+ François

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Points : 69
    Points
    69
    Par défaut
    Voici ça devrai faire ton bonheur j'ai essayé de faire simple avec les procedure
    je n'ai pas compilé donc il peut y avoir des erreurs mais facile à corrigé a+
    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
     
    .386
    .MODEL SMALL
    .STACK 100H
    .DATA 
    DEBUTX DB 10
    DEBUTY DB 10
    CURRENT_X DB ?
    CURRENT_Y DB ?
    COLOR DB 15
    NB_PIXEL DB 150
    HORIZ_OR_VERTI DB 1 ; ici tu peux imaginer Horizontale = 1, Vericale = 2 
    .CODE
    MAIN PROC
    	MOV AX,@DATA
    	MOV DS,AX
    	CALL MODE_VIDEO13
    	CALL AFFICHE_LIGNE
    	MOV AX,4C00H
    	INT 21H
    MAIN ENDP
     
    MODE_VIDEO13 PROC
    	PUSH AX
    	MOV AH,0
    	MOV AL,13H ; VGA 256 Couleurs, 320X200
    	INT 10H
    	POP AX
    MODE_VIDEO13 ENDP
     
    AFFICHE_PIXEL PROC
    	PUSHA
    	MOV AH,0CH
    	MOV AL,COLOR
    	;XOR BX,BX ; page 0 mais ici ça concerne EGA :  
    	XOR CX,CX
    	XOR DX,DX
    	MOV CL,CURRENT_X
    	MOV DL,CURRENT_Y
    	INT 10H
    	POPA
    AFFICHE_PIXEL ANDP
     
    AFFICHE_LIGNE PROC
    	PUSHA
    	MOV AL,DEBUT_X
    	MOV CURRENT_X,AL
    	MOV AL,DEBUT_Y
    	MOV CURRENT_Y,AL
    	XOR CX,CX
    	MOV CL,NB_PIXEL ; on va bouble NB_PIXEL fois
    CONTINUE :	
    	CMP HORIZ_OR_VERTI,1
    	JE HORIZONTALE
    	INC CURRENT_Y
    	JMP PIXEL
    HORIZONTALE :
    	INC CURRENT_X
    PIXEL : 
    	CALL AFFICHE_PIXEL
    	LOOP CONTINUE
    	POPA
    AFFICHE_LIGNE ENDP
     
     
    END MAIN
    si vous vous emmerdez codez codez et codez ça passera

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2011, 19h46
  2. Comment tracer une ligne à la souris
    Par sebmag dans le forum Qt
    Réponses: 12
    Dernier message: 06/09/2010, 12h37
  3. Réponses: 8
    Dernier message: 05/10/2009, 18h46
  4. Réponses: 11
    Dernier message: 26/08/2007, 14h07
  5. Comment tracer une ligne verticale dans un graphique
    Par developpeur82 dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/04/2007, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo