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 32-bits / 64-bits Assembleur Discussion :

[Masm32] Déclarer un buffer


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut [Masm32] Déclarer un buffer
    JB
    Je déclare mon buffer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer dd 1000 dub (0h)
    si je veux lire le buffer; le len c'est 1000 ou 4000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mov ecx,1000 "ou 4000"
    boff:
    mov eax,[buffer+ecx]
    dec ecx
    dec ecx
    dec ecx
    dec ecx
    jnz boff
    merci
    papi

  2. #2
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut
    La syntaxe de Masm étant ce qu'elle est (ce que je déplore) elle apporte un nombre de confusions hélas inutiles par manque de clarté et ceci en est un des nombreux exemples. La taille n'étant pas indiquée clairement tu hésites sur sa référence et c'est bien naturel (hélas...)

    Byte, Word, DWord, QWord...

    Tu sembles hésiter seulement entre Byte et DWord...

    Il me semble qu'un -> mov ecx 1000 | L0: mov eax D$buffer*ecx*4 | dec ecx | jns L0< <-- si tu es base 0, serait plus lisible et maintenable. Ceci dit, je pense que c'est un exemple illustratif vu que le contenu DWord d'eax n'est pas utilisé ni testé...

    @Plouchh papiX

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut
    merci plouchh
    j'hésite entre le byte et le dword , paque le buffer est déclaré en dword "buffer dd"
    mais le nombre après "dd" c'est 1000 ; ce 1000 c'est le nombre de dd ou le nombre de byte ?.
    la syntaxe "ecx * 4 ", elle fait quoi ? est-elle plus rapide que 4 dec ?
    tu es sûr de ton "jns" (saut ,si positif) , paque ecx = 0 ; il le considére comme positif ou pas
    si oui il fait un tour de plus !? non ?

    papi

  4. #4
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut
    Je ne répond pas aux question sur le compilateur Masm habituellement... c'est par pur égard à nos âges canoniques que je le fais et parce qu'aucun Masmeur de service ne semble te secourir...

    j'hésite entre le byte et le dword , paque le buffer est déclaré en dword "buffer dd"
    mais le nombre après "dd" c'est 1000 ; ce 1000 c'est le nombre de dd ou le nombre de byte ?.
    C'est exactement le noeud du problème: Un syntaxe porteuse de confusions comme tous les compilateurs. Là, les spécialistes de cette cochonnerie, te donnerons toutes les explications nécessaires...

    la syntaxe "ecx * 4 ", elle fait quoi ? est-elle plus rapide que 4 dec ?
    En fait LpAdresseDeBase+Registre*TailleDéplacement+Offset

    Donc: eax*4 = Id dans eax * taille DWord

    Cela t'évite aussi les 4 inc du même registre qui sont pénalisants et interdisent toute optimisation par un microprocesseur (surtout multicore).
    La diversification de registre permet le traitement simultané, ce qu'un seul registre ne permet pas: La mise en paralèlle des traitements n'est possible (et intéressante) que si tu ne dois pas les resynchroniser ensuite...

    tu es sûr de ton "jns" (saut ,si positif) , paque ecx = 0 ; il le considére comme positif ou pas
    si oui il fait un tour de plus !? non ?
    Oui, évidement: Je précise base 0.
    Jnz fait que tu traites un buffer ou une table jusqu'à 1 et si tu es en base 0 tu manques un élément.
    Le fait de traiter si ton registre est égale à FFFF_FFFF en fin de boucle te permet de régler le problème.

  5. #5
    Membre éprouvé
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Par défaut
    Etant un MASMatique comme dirait l'autre expert, je peux répondre à ça :
    buffer dd 1000 dup (0h)
    Ici, le 1000 correspond au nombre d'éléments dupliqués par l'opérateur DUP (pas dub), donc si ta variable est de type DWORD, tu auras... 1000 Dwords mis à 0h en mémoire.

Discussions similaires

  1. stencil buffer
    Par patapetz dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/02/2004, 17h23
  2. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 03h58
  3. Vider le buffer du clavier
    Par flavien tetart dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 12/07/2002, 08h35
  4. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00
  5. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h58

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