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 :

[NASM Linux 15.04] Additionner deux nombres


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #21
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ nasm -f elf64 coin64.asm 
    $ gcc coin64.o -o coin64
    $ ./coin64 
    Erreur de segmentation (core dumped)
    exact, je sais pas ce que j'ai foutu décidément...


    aller encore un, le dernier :
    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
    ;   **************************************                                                                                                                                                                                                   
    ;  ****************************************
    ; ** name     :  coin64.asm               **
    ; ** platform :  linux x86_64             **
    ; ** compile  :  nasm -f elf64 coin64.asm **
    ; **             gcc coin64.o -o coin64   **
    ;  ****************************************
    ;   **************************************
     
    ; ==============================================================
    ; on precise quelles sont les fonctions de la libc qu'on utilise
    ; ==============================================================
        extern printf
        extern scanf
     
    ; =======================
    ; on definit les sections
    ; =======================
    section .data
        msg1:       db "1er nombre: ", 0
        msg2:       db "2eme nombre: ", 0
        msg3:       db "resultat: "
        msg4:       db "%lld", 0
        msg5:       db 10, 0
     
    section .bss
        nb1:    resq 1
        nb2:    resq 1
        sum:    resq 1
     
    ; ==========
    ; vroooom...
    ; ==========
    section .text
        global main
     
        main:
            push rbp            ; on s'installe confortablement avec un prologue standard
            mov rbp, rsp
     
            mov rdi, msg1
            call printf         ; on affiche le premier message
     
            mov rdi, msg4
            mov rsi, nb1
            call scanf          ; on attend la saisie du premier nombre
     
            mov rdi, msg2
            call printf         ; on affiche le deuxieme message
     
            mov rdi, msg4
            mov rsi, nb2
            call scanf          ; on attend la saisie du deuxieme nombre
     
            mov rax, [nb1]
            mov rbx, [nb2]
            add rax, rbx        ; on effectue l'addition
            mov [sum], rax
     
            mov rdi, msg3
            mov rsi, qword [sum]
            call printf         ; on affiche le resultat a travers le 3eme message
     
            mov rdi, msg5
            call printf         ; on finit en affichant un retour chariot, pour vider le tampon
     
            leave               ; et on quitte avec l'epilogue standard
            ret

  2. #22
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Effectivement ton code marche
    Mais je tiens a dire je que je dis comme d'habitude , ce genre exercice est certes intéressant d'un point de vue pédagogique , mais l’intérêt réel est nul faire de l'assembleur pour appeler des fonction en C c'est le monde a l'envers (dans le sens autant le faire directement en C )
    Tout l’intérêt de l'assembleur est de communiquer avec la machine du coup je ne vois que 3 possibilités :
    -Utiliser une Machine Virtuelle pour faire du x86 32/64 Bits
    -Utiliser Dos-Box (mais de mon point de vue faire du x86 16bits c'est quasiment obsolète).

    Après c'est faire autre chose que du X86 :
    Soit de rester dans l’être du temps et faire du ARM ( avec Raspberry PI par exemple ) , du PIC ou de l'Atmel AVR (avec Arduino).
    Ou alors de faire pour d'ancienne machine :
    Les anciens ordinateur : Commodore 64 , Amiga , amstrad cpc , Atari ST
    Les anciennes consoles de jeux vidéo : Nes , Super Nintendo , Master System , Mega Drive , PC Engine , Neo Geo (et toute borne arcade des années 80-début 90).
    Il n'y a que 3 familles de processeur principalement a cet époque le 6500 , 68000 et le Z80.

  3. #23
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 478
    Points : 43 298
    Points
    43 298
    Par défaut
    faire de l'assembleur pour appeler des fonction en C c'est le monde a l'envers
    Oui, En général, on fait plutôt l'inverse.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #24
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Ton code marche. Merci!

  5. #25
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    Effectivement ton code marche
    enfin c'est bien ça m'aura fait réviser un peu c'est toujours ça de pris

    ce genre exercice est certes intéressant d'un point de vue pédagogique , mais l’intérêt réel est nul faire de l'assembleur pour appeler des fonction en C c'est le monde a l'envers (dans le sens autant le faire directement en C )
    oui je suis bien d'accord, même les shellcodes ne se font plus à la main et tout existe déjà à travers metasploit

    le 6500 , 68000 et le Z80.
    s/z80/8080/

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Additionner deux nombres en binaire
    Par laurecasier dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 12/10/2015, 08h18
  2. Additionner deux String qui sont des nombres
    Par JDev_ dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/05/2012, 13h00
  3. Réponses: 5
    Dernier message: 13/04/2011, 17h59
  4. Additionner deux nombres à virgule
    Par renaud26 dans le forum Langage
    Réponses: 2
    Dernier message: 11/12/2007, 16h29

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