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

Raspberry Pi Discussion :

Compilation nasm 32/64bit


Sujet :

Raspberry Pi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Points : 27
    Points
    27
    Par défaut Compilation nasm 32/64bit
    Bonsoir,
    Je me suis mis depuis quelque jour à faire de l'assembleur sur rasberry pi. Etant débutant sur linux j'ai suivis un tuto.
    Sauf que je compile en 32 ou 64bit, j'ai toujour cet erreur:
    file not recognized: file format not recognized
    Que faut-il que je fasse pour ne plus avoir ce problème ?

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut matrob72.

    Vous vous êtes trompés de didacticiel. Il est consacré à "x86 / x64".
    Comme vous utilisez la raspberry, il vous faut un assembleur "ARM".
    --> http://www.science.smith.edu/dftwiki...e_Raspberry_Pi

    Voici un fichier "makefile" :
    Code makefile : 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
    51
    52
    # ----------------------------- #
    #   Déclaration des Commandes   #
    # ----------------------------- #
     
    RM      = @rm -rf
    ASM     = @as
    CC      = @gcc
    EX      = @chmod +x
     
    # -------------------------- #
    #   Déclaration des Objets   #
    # -------------------------- #
     
    SRC     = $(wildcard *.asm)
    OBJ     = $(SRC:.asm=.o)
    BIN     = hello
     
    # --------------------------------- #
    #   Déclaration des Bibliothèques   #
    # --------------------------------- #
     
    LIBS    =
     
    # ------------------------------ #
    #   Déclaration des Paramètres   #
    # ------------------------------ #
     
    FLAG1   =
     
    FLAG    = $(FLAG1)
     
    # ------------------------------------ #
    #   Compilation et Edition des liens   #
    # ------------------------------------ #
     
    all: clean $(BIN) after
     
    .PHONY: clean
     
    clean:
            $(RM) $(OBJ)
            $(RM) $(BIN)
     
    $(BIN): $(OBJ)
            $(CC)  $(OBJ) -o $(BIN) $(LIBS)
     
    $(OBJ): $(SRC)
            $(ASM) $(SRC) -o $(OBJ) $(FLAG)
     
    after:
            $(RM) $(OBJ)
            $(EX) $(BIN)
    Comment l'utiliser ?
    Vous créer un fichier de nom "makefile" et vous insérez ce que je viens de vous donner.
    Vous créez aussi un fichier de nom "hello.asm" (pour le programme, voir le lien ci-dessus).

    Pour l'assembler, vous tapez "make".
    Vous aurez l'exécutable sous le nom de "hello".

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    merci beaucoup votre explication a résolue mon problème.
    J'ai mis ma question dans ce forum car je pensais que mon problème était lié à un problème de droits des fichiers comme j'ai déjà eu beaucoup de problème dessus.

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut matrob72.

    Avez-vous utilisez mon makefile ?
    Cela permet de ne pas retaper à chaque fois, les paramètres de l'assemblage.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Bonsoir Artemus24
    Effectivement, j'ai bien utilisé votre makefile.
    Après avoir étudié l'assembleur arm, j'ai eu quelques problèmes.
    Y auraient-t-ils un tuto assez complet pour ce genre d'assembleur ?
    Les interruptions système existe-t-il ? (je n'ai pas trouvé d'instruction pour)
    J'ai commencé à faire un serveur, mais j'ai eu quelques problème au niveau de l'activation du socket (bind). Pouvez vous jeter un œil ?
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    .equ AF_INET, 2
    .equ SOCK_DGRAM, 2
    
    	.struct  0
    sin_family:              @ famille : AF_INET
        .struct  sin_family + 2 
    sin_port:               @ le numéro de port
       .struct  sin_port + 2 
    sin_addr:                @ l'adresse internet
        .struct  sin_addr + 4 
    sin_zero:                @ un champ de 8 zéros
    	.struct  sin_zero + 8
    sin_fin:
    
    
    .data
    msg1: .asciz "Demarrage du serveur...\n" 
    sock: .word 0
    sinsize: .word 0
    sinServ:	.skip sin_fin
    sinCli:	.skip sin_fin
    
    .text
    .global main
    .extern printf
    .extern socket
    .extern connect
    .extern recv
    .extern close
    .extern htons
    .extern htonl
    .extern bind
    .extern listen
    .extern accept
    
    main:
    push {ip,lr}
    
    ldr r0,=msg1
    	bl printf
    mov r0,#2;mov r1,#2;mov r2,#0
    	bl socket
    ldr r1,=sock;str r0,[r1]	@stockage socket
    
    ldr r6,=sinServ   @select sin
    
    mov r0,#0
    	bl htonl
    str r0,[r6,#sin_addr]
    mov r0,#AF_INET;strh r0,[r6,#sin_family]	  @sin.sin_family = AF_INET;
    mov r0,#80
    	bl htons
    
    strh r0,[r6,#sin_port]   @sin.sin_port = htons(80);
    ldr r0,=sock;ldr r0,[r0]
    mov r1,r6;add r1,#sin_family
    mov r2,#sin_fin
    	bl bind
    
    ldr r0,=sock;ldr r0,[r0]
    mov r1,#0
    	bl listen
    mov r5,#0
    boucle:
    ldr r0,=sinsize;mov r1,#16;str r1,[r0] @sinsize=16
    @suite code
    
    add r5,#1
    mov r0,#3;cmp r0,r5;bne boucle
    pop {ip,pc}
    Merci de votre aide.

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut matrob72.

    Je devrais m'y mettre aussi à l'assembleur de la raspberry.
    Désolé de ne pouvoir faire plus.

    Je connais l'assembleur IBM370 sur gros système.
    Ainsi que les assembleurs 6502, 8080, 68000 ceux illustrés par Rodnay Zaks, il y a fort longtemps.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Salut Artemus24,
    Ce n'est pas grave, merci quand même de ton aide.

  8. #8
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonsoir.
    Quel est l'erreur rencontrée ?
    S'il s'agit de :
    Demarrage du serveur...
    Instruction non permise

    Vous devez revoir la terminaison de votre programme : un appel au call system Exit serait plus propre.

  9. #9
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonsoir.
    Je devais être fatigué lors de ma réponse à votre problème de serveur en assembleur Arm sur raspberry.
    Bon je reprends votre programme : je ne sais pas où vous avez récupéré la trame mais au vu des caractères délimitant les commentaires il s'agit d'un mélange d'instructions pour le compilateur nasm (;) et le compilateur gas (@) faisant appel en plus à des fonctions du langage C.
    Si vous voulez écrire un programme en assembleur ARM en utilisant les appels systeme Linux (en assembleur ARM, on ne fait pas appel aux interruptions) pour gérer les sockets, vous pouvez vous inspirer du programme décrit ici :
    https://assembleurarmpi.blogspot.com...ets-acces.html

    Mais apprendre l'assembleur Arm en commençant par les sockets n'est pas la meilleure façon. Vous trouverez un cours (en anglais) ici :
    https://thinkingeek.com/arm-assembler-raspberry-pi/

    Enfin j'ai repris l'idée d'écrire les programmes d'un ensemble client serveur que vous trouverez ici :
    https://github.com/vincentARM/Arm-as...r/ProjetSocket

    Il s'agit de programmes qui s’exécutent en assembleur 32 bits sur des raspberry 2 et 3 mais ils peuvent aussi s’exécuter sur des vieux téléphones Android 32 bits avec l'application Termux. J'ai pu les faire fonctionner avec le client sur android et le serveur sur raspberry.
    Et après quelques déboires, avec le serveur sur Android et le client sur Raspberry.
    Bien sûr, ces programmes ne sont pas complets mais peuvent servir de base.
    Bon courage.

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

Discussions similaires

  1. [Sydney] Compilation vers iOS 64bits
    Par Carmichael dans le forum Composants FMX
    Réponses: 3
    Dernier message: 24/06/2020, 22h49
  2. probleme compilation sous debian 64bits
    Par 4nth0nym3 dans le forum C++
    Réponses: 5
    Dernier message: 01/03/2017, 20h28
  3. différencier compil 32bit ou 64bit
    Par vinceouille dans le forum MinGW
    Réponses: 0
    Dernier message: 18/07/2013, 18h06
  4. [OCILIB] compilation sur sun 64bits
    Par joce3000 dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 02/06/2009, 15h06
  5. [TASM/NASM] Compilation boot
    Par Mercenary Developer dans le forum Assembleur
    Réponses: 1
    Dernier message: 22/01/2007, 15h27

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