begin process at 2012 05 25 05:06:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Général

 > 

Labels, macros et répétitions


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Labels, macros et répétitions

vendredi 30 novembre 2007 à 20:27:42 | Labels, macros et répétitions

samsamX

Bonjour à tous !

Je programme en asm depuis 3 semaines seulement, mais j'ai déjà eu le temps de voir quelques trucs...
Etme voici confronté à mon premier gros problème :

Je cherche à faire un librairie graphique 2D pour fasm
(qui s'appellera 2D4Fasm), pour cela j'ai fait des macros:
-verticale
-horizontale
-pixel
-rect vide
-rect plein
...
et...
-LIGNE



L'algo pour dessiner une ligne oblique en asm est au point ^^, c'est celui de Bresenhams
un seul problème, c'est une M-A-C-R-O !!!
et j'ai des labels, donc quand je dessine 2 lignes, ca bug !

-> symbol already defined...

Et oui... on ne peut pas mettre deux labels identiques...

mes questions :

Ais-je bien fais d'utiliser des macros pour un librairie ?
Comment éviter le problème des labels ?
Aimez vous les bananes ?
Quelle est la marque de votre voiture ?
D'autres librairies éxistent-elles déjà ?


Merci d'avance

-----------------
only Rock'n'Roll
-----------------

lundi 3 décembre 2007 à 09:34:49 | Re : Labels, macros et répétitions

_dune2_

Membre Club
Réponse acceptée !
Salut,



je sais qu'en assembleur GAS (Gnu ASsembler), il y a une syntaxe pour nommer les labels de manière générique, ex :

jmp  1f # sauter vers le 1er label "1" "forward" -> en avant
:1
jmp  1b # sauter vers le 1er label "1" "backward" -> en arrière

Et le fait d'utiliser cette notation de la label (uniquement des numéros suffixés de "f" ou de "b") permet donc d'utiliser des labels dans des macros, car le compilo sait à quel label tu fais référence.

Ce n'est pas une réponse car je ne connais pas fasm, mais une piste sur la manière dont fasm pourrait l'implémenter.

Gentoo... que du bonheur ...
lundi 3 décembre 2007 à 11:29:06 | Re : Labels, macros et répétitions

ToutEnMasm

Salut,
Ce genre de librairie existe déja,voir GDI.

Pour créer une librairie,on est obliger de passer par des fonctions pouvant utiliser des macros.

lundi 3 décembre 2007 à 16:22:57 | Re : Labels, macros et répétitions

samsamX

J'ai trouvé une solution potable,

> fichier.asm
> ...
> ...
> line 20,30,20,30,128
> ...
>
>
> macros.inc
> ...
> macro line x1,y1,x2,y2,color
> push x1
> push y1
> push x2
> push y2
> push color
> call drawLine
>
>
> fichier2.asm
> ...
> ...
> drawLine proc near
< <mon code>
> endp
> ...


Après, faut voir si ca marche

Et j'ai un autre pb :
> push al
> pop al
Ca génère un bug, parceque pop m'envoie deux bits (faible ET fort)
comment puis-je récupérer UNIQUEMENT le bit de poids faible avec pop ?


-----------------
only Rock'n'Roll
-----------------

lundi 3 décembre 2007 à 18:08:05 | Re : Labels, macros et répétitions

_dune2_

Membre Club
salut,


ha ouai .. ben moi j'ai encore plus optimisé que vous !

drawline(x1,y1,x2,y2,color);

... c'est plus simple à écrire, aussi rapide ... et bien plus lisible ....

Gentoo... que du bonheur ...
mercredi 5 décembre 2007 à 01:03:48 | Re : Labels, macros et répétitions

samsamX

nimportnawak !!

Au lieu de me dire que ton système est mieux, lit mes messages...

"> fichier.asm
> ...
> ...
> line 20,30,20,30,128
> ..."

C'est le code de l'utisiateur ca, donc je pense que
drawline(x1,y1,x2,y2,color);
et
line x1,y1,x2,y2,color
sont aussi simples et lisibles


J'ai trouvé les réponses a mes problèmes, merci


-----------------
only Rock'n'Roll
-----------------

mercredi 5 décembre 2007 à 09:35:05 | Re : Labels, macros et répétitions

_dune2_

Membre Club
salut,

Ce que je voulais juste dire en te mettant que j'avais une fonction qui allait aussi vite,
c'est que faire de l'assembleur :
> macro line x1,y1,x2,y2,color
> push x1
> push y1
> push x2
> push y2
> push color
> call drawLine
pour appeler une fonction du gdi32, ... autant faire du C pour une meilleure lisibilité ... d'où mon "drawline(x1,y1,x2,y2,color);".

Je pense que dans bien des cas, l'utilisation de l'assembleur à outrance n'est pas une solution efficace. D'une part car on se substitut au rôle du compilateur C, et on passe donc à coté de tas d'optimisations que le compilateur C connait bien mieux que nous ! Et d'une autre part, car la relecture du code est bien plus exigente et le risque d'erreur bien plus grand !

L'utilisation d'assembleur inline est à mon avis, aujourd'hui, le meilleur moyen de tirer le maximum du compilo C pour ce qui est des appels de fonctions standards, et de l'assembleur pour les parties critiques uniquement. De cette manière, le code reste facilement lisible et débuggable, tout en conservant des parties de forte optimisation ASM là où le compilo n'aurait pas fait le bon choix (instructions SIMD, astuce de codage, streaming ... etc).
C'est pourquoi je me suis un emporté au vu de la macro qui réalise un simple appel à la fonction "drawline", quelle est la raison du choix du langage assembleur ??

Gentoo... que du bonheur ...
mercredi 5 décembre 2007 à 20:16:31 | Re : Labels, macros et répétitions

samsamX

Pourquoi l'assembleur et pas le C ???
aaaaaaaaaaaaaaaaaah !! ^^

Quatres raisons :
- J'ai des projets à faire en asm, et en asm UNIQUEMENT !
- C'est un très bon language pour développer des algorithme (complexe, certes, mais j'aime ca ^^)
- C'est un language que tout bon informaticien se doit de connaitre (puisqu'il est la base de la programmation), et je voudrais précisément devenir programmeur-développeur
- Du C ??? Ben... j'en fait déjà ^^


Je m'intéresse à pas mal de languages, et j'en vois d'autres encore à l'IUT... En ce moment je maitrise parfaitement le Basic Casio, le MLC (language Casio/TI), je maitrise plutôt bien le C/C++, et j'apprend l'asm 80x86, le Java, (le XHTML et le CSS si on peut appeler ca des languages), le BrainFuck, le PHP et le SQL !!!
En plus, on voit le fonctionnement de la console Linux (ce qui n'est pas rien) et la méthode MERISE (qui est notre plus gros module)

Comme on n'a pas tant de temps que cela en cours, on passe plutot vite sur certains languages... Donc j'en apprend plus chez moi encore, pour parfaire ma culture !

Et même si certaines choses ne me serviront plus après, c'est toujours sympa de découvrir ^^



L'union de l'asm et du C m'était inconnue par exemple, tu m'apprend qqchose la... je regarderais cela de plus près.

-----------------
only Rock'n'Roll
-----------------

mercredi 5 décembre 2007 à 22:44:13 | Re : Labels, macros et répétitions

_dune2_

Membre Club
re,

"L'union de l'asm et du C m'était inconnue par exemple, tu m'apprend qqchose la... je regarderais cela de plus près."

J'en apprends moi aussi tous les jours encore ;) c'est comme cela qu'on progresse ;)

Pour parler un peu de l'asm inline, l'interêt est d'avoir la simplicité du C (ou C++) pour le "main" ainsi que les appels classique de printf et autres fonctions courantes de la stdlib. Et de pouvoir se concentrer là où l'assembleur prend tout son interêt. Ainsi, on apprend beaucoup plus de choses interessantes que de choses rébarbatives ;)

ex :

toto.c :

#include <stdlib.h>

#define DATA_SIZE 256

int main(int argc, char **argv)
{
    unsigned char A[DATA_SIZE];
    unsigned char R[DATA_SIZE];
    unsigned char G[DATA_SIZE];
    unsigned char B[DATA_SIZE];
    unsigned int ARGB[DATA_SIZE];

    // conversion du buffer ARGBARGB.. en 4 buffer AA.. , RR.., GG.., BB..
    _asm
    {
        ... là tu mets ton code asm pour la conversion ...
    }

    return 0;
}

-> bilan, seule la fonction réalisant la conversion sera en asm, ce qui rend ton programme facilement lisible car la partie interessante n'est pas noyé dans dans le code assembleur du "return" ou du "main" voir d'autres fonctions si y-a ...


Gentoo... que du bonheur ...


Cette discussion est classée dans : problème, asm, macros, labels, répétitions


Répondre à ce message

Sujets en rapport avec ce message

Question Asm/C++ [ par Lelys ] Bonjour,Je voudrai faire un OS, mais le problème c'est que je ne m'en sort pas en ASM...Je suis plus allese en C/C++.Mais le problème est que les syst problème d'horloge [ par gctom ] bonjour a tousje vous expose mon problème :je dois réaliser uen horloge qui permet d'afficher l'heure la date et autre chose.ceci étant fait je passe appeller du C en asm [ par S2R ] Bonjour, je voudrait savoir comment utiliser un code écrit en C dans un code assembleur. Utilisation de printf avec compilo GCC [ par MattXSFR ] J'ai un petit problème assez étrange, et j'arrive pas à le résoudre.J'ai fait un programme en ASM syntaxe GNU qui utilise la fonction printf pour affi Compilateur ASM !!! [ par WaFFel ] Bonjour !en fin de compte c`est pas vraiment un question sur un code source mais plustot c`est parce que je cherche un compilateur ASM(titre du post) J'ai un problème de "object not previously defined" [ par subaruwrc2004 ] Bonjour, dans mon code source j'ai cette ligne -> btfsc STATUS,c ;Quand je compile, l'erreur suivante m'apparait-> Error[113] D:\PROJET ELECTRO\AIRF Problème avec le org sous nasm [ par dodo76 ] je développe un prog sous nasm pour le mettre ensuite dans une eprom. Je veux que le programme commence à l'adresse 0XFFF0. En début de prog, je mets Comment programmer l'ASM? [ par Tioneb ] Salut,je programme en VB et l'ASM (sous windows) m'interresse; mais je n'y connait pas grand chose! Si quelqu'un pouvait me dire avec quel logiciel on problème avec PIC et PLL [ par lionel57 ] Bonjour,Est-ce que quelqu'un saurait comment gérer la PLL LMX2306 grace à un PIC16F628.J'ait réussie à faire les initialisations mais il me reste le d Aide nombre en asm 8086 16 bits [ par Maureka ] je suis debutant en asm intel 16 bits.j'ai un projet à réaliser et cela consiste à faire un programme qui affiche la liste des nombres premiers compri


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



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

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