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 :

Affichage d'un tableau


Sujet :

x86 16-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut Affichage d'un tableau
    bonsoir,

    Je souhaite afficher le contenu d'un tableau selon la méthode suivante :
    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
    [BITS 16]
    [ORG 100h]
    [SEGMENT .text]
     
    ;mon problème est ici je n'arrive pas à récupérer le contenu de la n-ième "cellule" dans bx
    ;j'ai essayé : 
     
    mov ax,tab
    add ax,12 ;pour l'adresse 12ème cellule soit un '5'
    ;mais maintenant comment pas dans bx le contenu à l'adresse contenue dans ax puisque ceci ne fonctionne pas
     
    mov bx,[ax]
     
    cmp bh,0
    je aff0
    cmp bh,1
    je aff1
    cmp bh,3
    je aff3
    cmp bh,5
    je aff5
     
    aff0:
            mov al,'0'
            jmp aff
    aff1:
    	mov al,'1'
    	jmp aff
    aff3:
    	mov al,'3'
    	jmp aff
    aff5:
    	mov al,'5'
    	jmp aff
     
    aff:
    	mov ah,0Eh
    	int 10h
     
    fin:
    	mov ax,4c00h
    	int 21h
     
    [SEGMENT .data]
    tab db 0,0,0,0,0,0,0,0,0,0,0
         db 5,5,5,5,5,5,5,5,5,5,5
         db 1,1,1,1,1,1,1,1,1,1,1
         db 1,1,1,1,1,1,1,1,1,1,1
         db 3,3,3,3,3,3,3,3,3,3,3
         db 3,3,3,3,3,3,3,3,3,3,3
    Merci d'avance pour vos réponses

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Par défaut
    Bonsoir buzorg et bienvenue.

    On peut voir que ton tableau et ton code ne sont pas dans le même segment. Que se passe-t-il si tu essayes de compiler tout en un seul segment (supprime [SEGMENT .data]) ou si tu fais ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mov ax,tab
    add ax,12 ;pour l'adresse 12ème cellule soit un '5'
    ;mais maintenant comment pas dans bx le contenu à l'adresse contenue dans ax puisque ceci ne fonctionne pas
     
    mov ds, .data
    mov bx,[ds:ax]

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

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Moi je ne suis pas sur que ax puisse être utilisé comme pointeur
    Enfin, non... je reformule ma phrase :
    En mode 16 bits, ax ne peut pas être utilisé comme pointeur

    Mais bx oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    mov bx,tab
    add bx,12 ;pour l'adresse 12ème cellule soit un '5'
     
    mov bh,[bx] ; c'est un tableau d'octets alors j'utilise bh directement
     
    cmp bh,0
    je aff0
    cmp bh,1
    je aff1
    cmp bh,3
    je aff3
    cmp bh,5
    je aff5
    plutot que de faire une comparaison pour chaque valeur, tu peux aussi
    placer directement la valeur dans al (plutot que de passer par bh)
    et ajouter "0" (soit 48) avant d'afficher

    a+ François

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Par défaut
    Désolé Forthman, je n'aavais pas fait attention...

    Toutefois, ma solution d'adresser avec ds en segment marche, au pris d'un petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mov  ax,text
    push ax
    pop   dx
    (sous FASM)

    A condition bien entendu de d'utiliser bx comme tu le dis !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Par défaut
    Citation Envoyé par Forthman Voir le message
    En mode 16 bits, ax ne peut pas être utilisé comme pointeur
    En effet après avoir essayé plusieurs méthode j'ai trouvé moyen de faire en passant par bx et en faisant un mov bx,[bx]

    Puis en fait je passe par une variable intermédiaire dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mov bx,[add_sprite]
    ...
    mov al,[bx]
    stosb
    inc bx
    (oui oui, c'est pour afficher des sprites)

    Maintenant, j'ai juste une question : pourquoi je suis obligé d'utiliser stosb alors que j'ai lu que s'était equivalent à mov [es:di],al, qui ne fonctionne pas ?...


    Merci beaucoup en tout cas

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

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Pour moi, le seul avantage quand à l'utilisation de stosb, c'est que le registre
    di est incrémenté (ou décrémenté suivant le flag d ) automatiquement.

    Tes sprites, tu les affiches dans quelle résolution ?

    a+ François

Discussions similaires

  1. [JSP]affichage d'un tableau sur plusieurs pages
    Par MAJIK_ENIS dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 29/08/2005, 11h21
  2. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  3. Prob d'affichage d'un tableau resultant d'u...
    Par Yohips dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 08/12/2004, 17h23
  4. [MFC] Affichage d'un tableau
    Par SethPech dans le forum MFC
    Réponses: 7
    Dernier message: 23/02/2004, 15h48
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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