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

Linux Discussion :

assembleur linux (code) instruction


Sujet :

Linux

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut assembleur linux (code) instruction
    bonjour voilà je dois ecrire un code pour l'instruction 'wc -c nomFichier' (cette instruction permet de donner le nombre d'octets du fichier nomFichier)
    j'ai une petite idee générale mais je ne sais vraiment pas comment faire
    j'ai pensé a ouvrir le fichier (entré en parametre)
    lire caractère par caractère et incrementé un compteur en meme temps et ensuite fermer le fichier mais plus je ne sais pas
    si quelqu'un pourrait m'aider ce serait bien gentil
    merci d'avance

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    voila j'ai fait mon code mais j'ai une erreur que je n'arrive pas a corriger
    enfin du moins je ne vois pas quoi changer

    la ligne de code ou il y a une erreur est celle-ci :
    mov byte[bl], caract

    et l'erreur lors de la compilation est celle-la :
    Mwc.asm:55: error: invalid effective address

    quelqu'un pourrait me dire ce que je dois changer...

  4. #4
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Citation Envoyé par sagestion Voir le message
    la ligne de code ou il y a une erreur est celle-ci :
    mov byte[bl], caract

    et l'erreur lors de la compilation est celle-la :
    Mwc.asm:55: error: invalid effective address

    quelqu'un pourrait me dire ce que je dois changer...
    Il faut adresser des registres d'au moins 16 bits (BX, SI, DI, BP et n'importe quel registre 32 bits). Il vaut mieux coder en 32 bits.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    j'ai changé le registre en un registre de 32 bits et ca m'a engendré plusieurs autres erreurs notamment une avec la ligne que je viens de corriger

    Mwc.asm:57: error: invalid combination of opcode and operands

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    ah c'est bon normalement cette erreur est corrigé par contre quand je compare un registre et une valeur j'ai une errreur

    voila mon morceau de code :

    mov ebp, esp
    mov dword eax, [ebp]
    cmp [eax], dword 1
    je exit

    voila l'erreur qu'on me donne :

    Mwc.asm:23: error: short jump is out of range


    si vous savez m'aider un grand grand grand merci

  7. #7
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Montre ton code entier ce sera plus simple.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    ok voila :

    BITS 32
    2 global main
    3 extern printw
    4
    5 section .data
    6 LF EQU 10
    7 cpt db 0
    8
    9 section .bss
    10 handle resd 1
    11 caract resb 1
    12 longueur EQU $-caract
    13 fichier resb 1
    14
    15
    16 section .code
    17 main:
    18 mov ebp, esp
    19 mov dword eax, [ebp]
    20 cmp [eax], dword 1
    21 je exit
    22 mov dword eax, [ebp+4]
    23 cmp [eax], dword 0
    24 je exit
    25 add eax, 4
    26 mov eax, [ebp+12]
    27 mov fichier, [eax]
    28
    29
    30 debut:
    31 mov eax, 5
    32 mov ebx, fichier
    33 mov ecx, 00b
    34 mov edx, 0
    35 int 80h
    36
    37 compteur:
    38 mov eax, 3
    39 mov ebx, [ebp-4]
    40 mov ecx, ebp
    41 sub ecx, 8
    42 mov edx, 1
    43 int 80h
    44
    45 mov dword [esi], caract
    46 cmp byte [esi], longueur
    47 je exit
    48 inc byte [cpt]
    49 jmp compteur
    50
    51 finFichier:
    52 mov ecx, [cpt]
    53 mov eax, 6
    54 mov ebx, [handle]
    55 int 80h
    56
    57 ecriture:
    58 mov eax, 4
    59 mov ebx, 1
    60 mov ecx, cpt
    61 mov edx, 1
    62 int 80h
    63
    64 finEcriture:
    65 mov byte [caract], ' '
    66 mov eax, 4
    67 mov ebx, 1
    68 mov ecx, caract
    69 mov edx, 1
    70 int 80h
    71
    72 mov eax, 4
    73 mov ebx, 1
    74 mov ecx, [fichier]
    75 mov edx, 1
    76 int 80h
    77
    78 exit:
    79 mov eax, 4
    80 mov ebx, 1
    81 mov ecx, LF
    82 mov edx, 1
    83 int 80h
    84
    85 mov eax, 1
    86 mov ebx, 0
    87 int 80h

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    ah et voila les autres erreurs tant qu'on y est du code (merci BEAUCOUP BEAUCOUP)

    Mwc.asm:21: error: short jump is out of range
    Mwc.asm:24: error: short jump is out of range
    Mwc.asm:27: error: invalid combination of opcode and operands

  10. #10
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Édite ton message pour mettre les balises [code] et enlève les numéros de ligne, ce sera plus facile pour tester.
    À la ligne 27 tu essaies de mettre la variable pointée par EAX dans l'adresse fichier, ce qui n'a pas de sens. Tu veux peut-être faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov eax, [eax]
    mov [fichier], eax
    Pour les deux autres essaie "je near exit" : http://nasm.sourceforge.net/doc/nasm...section-11.1.2

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    voila j'ai fait les changements que tu m'as dit et ca a compilé sans probleme mais a l'execution ca m'affiche erreur de segmentation

  12. #12
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Utilise un debugger (je ne sais pas ce qu'il y a sous Linux à part GDB) ou au pire commente les lignes pour voir laquelle fait planter.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    ok tres bien merci beaucoup pour ton aide c'est tres gentil

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

Discussions similaires

  1. Que pensez vous d'un collecteur/assembleur de code?
    Par zintelix3d dans le forum Débuter
    Réponses: 2
    Dernier message: 18/05/2008, 17h10
  2. [Débutant] Assembleur et code blocks sous Vista
    Par jackoboss dans le forum Assembleur
    Réponses: 2
    Dernier message: 11/05/2008, 08h54
  3. Problème avec assembleur dans code C++
    Par wishmerhill dans le forum C++
    Réponses: 0
    Dernier message: 05/03/2008, 11h38
  4. Réponses: 18
    Dernier message: 07/08/2007, 17h12
  5. [GCC] Assembleur inline et instructions SSE2
    Par progfou dans le forum Linux
    Réponses: 3
    Dernier message: 27/06/2007, 20h44

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