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 :

paramètres de macro


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut paramètres de macro
    Bonjour tous,
    voici une macro
    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
     
    %macro	drawPoint 2
    	mov cx, %1		; POINT_X
    	mov ax, cx
    	and ax, 0x0007		; récupère le reste de la division qui va suivre
    	shr cx, 3		; division par 8
    	mov bx, PLANE_ORIGIN	; ordonnée en octet
    	add bx, cx
    	sub bx, 40*%2		; POINT_Y .coordonnée finale de l'octet
    	mov cx, 7
    	sub cx, ax		; numéro du bit de l'octet concerné
    	stc			; CF = 1
    	mov ah, 0x00
    	rcr ah, cl		; positionne le bit concerné à 1
    	mov al, [es:bx]		; rempli les tampons VGA
    	mov [es:bx], ah		; envoi l'octet proceseur dans VGA
    %endmacro
    je l'appelle 2 fois de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	drawPoint 1, 1
    	drawPoint [pointx], [pointy])
    C'est le deuxième appel qui pose problème.
    Nasm refuse de compiler : error: expression syntax error

    Et si je tape ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            drawPoint 1, 1
    	drawPoint [pointx], [pointy])
    j'ai droit à : error: invalid operand type

    Je précise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pointx	dw	0x0000
    pointy	dw	0x0000
    Alors la question est : <<comment dois-je appeler la macro pour lui passer les contenus mémoire
    de pointx et pointy ?

  2. #2
    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
    On est d'accord, une macro permet de définir une séquence de code qui va être recopiée à chaque appel,
    en remplaçant chaque %n par les valeurs passées en paramètre.

    Donc, quand tu fais : drawPoint [pointx], [pointy]

    le code généré par le compilateur va être : sub bx, 40*[pointy]

    et ça, bien ça marche pas des masses

  3. #3
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Bon, je comprends; mais alors comment faire pour passer le contenu mémoire à drawPoint ?
    Est ce seulement possible ? ou bien faut-il uniquement passer des constantes ?

  4. #4
    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
    Bien sûr que tu peux passer des variables. par contre, tu ne peux pas faire d'opération pendant la compilation (ici ton *40)
    Comme je n'ai pas envie de réécrire tout ton code, je vais faire un truc de cochon mais qui devrait fonctionner

    Le code qui va suivre est destiné à remplacer : sub bx, 40*%2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    push dx
    push ax
    push bx
    mov bx,40
    mov ax,%2
    mul bx
    pop bx
    add bx,ax
    pop ax
    pop dx
    Oui, je sais, c'est crade
    la bonne solution, serait de revoir tout le code pour optimiser l'utilisation des registres, mais là c'était juste pour que ça fonctionne

  5. #5
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Forthman Voir le message
    la bonne solution, serait de revoir tout le code pour optimiser l'utilisation des registres ...
    C'est ce que j'ai fait

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

Discussions similaires

  1. Difficulté passage . en paramètre de macro
    Par Filippo dans le forum Macro
    Réponses: 2
    Dernier message: 19/04/2010, 17h06
  2. Appel de fonction en paramètre de macro
    Par enicnath dans le forum Macro
    Réponses: 4
    Dernier message: 26/03/2010, 09h38
  3. Passage de paramètres à une macro depuis la ligne de commande
    Par Atatorus dans le forum Général VBA
    Réponses: 4
    Dernier message: 05/10/2009, 10h22
  4. Passer un paramètre à une macro avec Application.run
    Par ouskel'n'or dans le forum VBA Word
    Réponses: 1
    Dernier message: 05/10/2007, 15h20
  5. [VB]Passage de paramètre à une macro
    Par LaboClarins dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/02/2006, 09h02

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