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 :

Interfaçage ASM/C++ (fonctions d'I/O)


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Interfaçage ASM/C++ (fonctions d'I/O)
    Bonjour,

    Je suis entrain de plancher sur un problème de multiplication matricielle en language assembleur, où l'on initialises 2 matrices (compatibles pour la multiplication) et stocke le résultat dans une troisième.

    Chaque élément (entier) est codé sur 1 byte (requis dans mes spécifications), et je me suis mis en tête de créer une interface C++ (2 fonctions séparées) permettant:

    1.) d'initialiser les matrices via le prompt utilisateur
    2.) de les afficher sur le terminal

    Je me heurte à deux problèmes, dont 1 que je n'arrives pas à résoudre.

    Avec C++ (en tout cas pour mon architecture) je ne sais pas utiliser de type entier codé sur 8bits... pour l'initialisation, je "trompes" donc le compilateur en lui annoncant que je travailles sur un tableau de char (1byte) en 2 dimension, une fois la valeur d'une case initialisée, j'en soustrait la valeur 48 afin de recupérer un motif binaire correspondant à l'entier rentré...c'est pas joli mais ca marches, pour l'affichage, je fait un cast (int) devant le caractère. Je ne suis pas sur s'il existe une solution plus élégante?

    Mon vrai problème c'est que je dois toujours préciser la taille de la deuxième dimension de ma matrice de char (par exemple: char v[][DIM]) et donc je dois créer autant de fonctions d'affichage et d'initialisation que j'ai de matrice de taille differentes.. Y aurait-il un moyen de ne pas devoir préciser la taille de la 2ème dimension (et de la passer en parametre)?

    Merci d'avance,
    Sedrik

    Pour info, voici le code des fonctions:
    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
     
    #include <iostream>
    using namespace std;
     
    extern "C" void initMat(char v[][3], int ligne, int colonne)
    {
        cout << "Enter lines: " << endl;
        for (int i= 0; i< ligne; ++i)
    	for (int j= 0; j< colonne; ++j)
    	{
    	    cin >> v[i][j];
    	    v[i][j]-=48;
    	}
    }
    extern "C" void affMat(char v[][3], int ligne, int colonne)
    {
        for (int i= 0; i< ligne; ++i)
        {
    	for (int j= 0; j< colonne; ++j)
    	    cout << (int) v[i][j] << " ";
    	cout << endl;
        }
    }

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Où est l'assembleur là dedans ?
    Une solution serait de modifier les prototype comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extern "C" void initMat(char *v, int ligne, int colonne)
    <...>
    extern "C" void affMat(char *v, int ligne, int colonne)
    L'inconvénient est que tu devras faire le calcule des déplacements explicitement, puisque le compilateur n'est plus en mesure de le faire implicitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cin >> v[i*colonne+j];
    <...>
    cout << (int) v[i*colonne+j] << " ";
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    Où est l'assembleur là dedans ?
    Il est bien caché, n'est-ce pas?
    J'ai hésité à poster dans le forum C++.. Si besoin est, n'hésitez pas à transférer le post là-bas.

    Une solution serait de modifier les prototype comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extern "C" void initMat(char *v, int ligne, int colonne)
    <...>
    extern "C" void affMat(char *v, int ligne, int colonne)
    L'inconvénient est que tu devras faire le calcule des déplacements explicitement, puisque le compilateur n'est plus en mesure de le faire implicitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cin >> v[i*colonne+j];
    <...>
    cout << (int) v[i*colonne+j] << " ";
    Je vais essayer ca, merci et bon dimanche à tous.

Discussions similaires

  1. Réponses: 28
    Dernier message: 03/06/2009, 09h31
  2. Réponses: 1
    Dernier message: 21/01/2009, 09h54
  3. Réponses: 6
    Dernier message: 04/01/2008, 11h47
  4. Renvoi d'une fonction ASM
    Par themacprod dans le forum Assembleur
    Réponses: 2
    Dernier message: 04/03/2007, 13h08
  5. Appel d'une fonction en C par un noyau en asm (link)
    Par julson dans le forum Programmation d'OS
    Réponses: 7
    Dernier message: 22/03/2005, 15h14

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