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

Assembleur Discussion :

Récupérer des arguments saisis dans l'invite de commandes


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Récupérer des arguments saisis dans l'invite de commandes
    Bonjour,

    Dans le cadre d'un projet je dois réécrire la commande DIR en langage assembleur.
    La programmation s'effectue sous Windows avec masm32.

    Je souhaiterais récupérer les arguments saisis par l'utilisateur, y compris le nom du programme.

    Par exemple:

    L'utilisateur entre le nom du programme: dir.exe
    J'aimerais que cet argument soit récupéré, même chose pour 2 arguments ou plus, sachant qu'après 2 arguments le programme ne doit pas s’exécuter mais ça c'est un détail.

    Lorsque l'équivalent en C de "argv[0"] ou que "argv[0], argv[1] et argv[2] ... argv[n]" sont remplis, le programme doit me retourner un message du genre:
    "le programme fonctionne comme suit: %s [dossier]".

    Actuellement, lorsque je saisis dir.exe, il me retourne:

    "le programme fonctionne comme suit: NULL [dossier]"

    C'est donc qu'il ne récupère aucun argument, même chose avec n arguments à la suite.

    Voici la fonction main:

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
     
    main proc
     
    	PUSH EBP
    	MOV EBP, ESP
     
    	AND ESP, -16
    	SUB ESP, 32
     
    	CALL get_current_dir_name
    	MOV DWORD PTR [ESP+28], EAX
    	MOV EAX, DWORD PTR [EBP+12]
    	MOV EAX, DWORD PTR [EAX]
    	CMP EAX, offset end_line
    	JE L21
     
    	MOV EAX, DWORD PTR [EBP+12]
    	ADD EAX, 4
    	MOV EAX, DWORD PTR [EAX]
    	TEST EAX, EAX 
    	JNE L21
     
    	MOV DWORD PTR [ESP], offset file
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 13
    	CALL color
     
    	MOV DWORD PTR [ESP], offset pink
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 7
    	CALL color
     
    	MOV DWORD PTR [ESP], offset folder
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 10
    	CALL color
     
    	MOV DWORD PTR [ESP], offset green
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 7
    	CALL color
     
    	MOV DWORD PTR [ESP], offset colon
    	CALL printf
     
    	MOV DWORD PTR [ESP], offset break
    	CALL crt_system
     
    	MOV EAX, DWORD PTR [ESP+28]
    	MOV DWORD PTR [ESP], EAX
    	CALL recursive
     
    	MOV DWORD PTR [ESP+24], EAX
    	CMP DWORD PTR [ESP+24], 1
    	JNE L22
     
    	MOV EAX, DWORD PTR [ESP+24]
    	MOV DWORD PTR [ESP+4], EAX
    	MOV DWORD PTR [ESP], offset only
    	CALL printf
    	JMP L23
     
    L22:
    	CMP DWORD PTR [ESP+24], 0
    	JNE L24
     
    	MOV EAX, DWORD PTR [ESP+24]
    	MOV DWORD PTR [ESP+4], EAX
    	MOV DWORD PTR [ESP], offset no
    	CALL printf
    	JMP L23
     
    L24:
    	MOV EAX, DWORD PTR [ESP+24]
    	MOV DWORD PTR [ESP+4], EAX
    	MOV DWORD PTR [ESP], offset several
    	CALL printf
     
    L23:
    	MOV EAX, 0
    	JMP L25
     
    L21:
    	CMP DWORD PTR [EBP+8], 2
    	JE L26
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 12
    	CALL color
     
    	MOV DWORD PTR [ESP], offset warn
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 7
    	CALL color
     
    	MOV DWORD PTR [ESP], offset invalid
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 14
    	CALL color
     
    	MOV EAX, DWORD PTR [EBP+12]
    	MOV EAX, DWORD PTR [EAX]
    	MOV DWORD PTR [ESP+4], EAX
    	MOV DWORD PTR [ESP], offset target
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 7
    	CALL color
     
    	MOV EAX, 1
    	JMP L25
     
    L26:
    	MOV DWORD PTR [ESP], offset file
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 13
    	CALL color
     
    	MOV DWORD PTR [ESP], offset pink
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 7
    	CALL color
     
    	MOV DWORD PTR [ESP], offset folder
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 10
    	CALL color
     
    	MOV DWORD PTR [ESP], offset green
    	CALL printf
     
    	MOV DWORD PTR [ESP+4], 0
    	MOV DWORD PTR [ESP], 7
    	CALL color
     
    	MOV DWORD PTR [ESP], offset colon
    	CALL printf
     
    	MOV DWORD PTR [ESP], offset break
    	CALL crt_system
     
    	MOV EAX, DWORD PTR [EBP+12]
    	ADD EAX, 4
    	MOV EAX, DWORD PTR [EAX]
    	MOV DWORD PTR [ESP], EAX
    	CALL recursive
     
    	MOV DWORD PTR [ESP+24], EAX
    	CMP DWORD PTR [ESP+24], 1
    	JG L27
     
    	MOV EAX, DWORD PTR [ESP+24]
    	MOV DWORD PTR [ESP+4], EAX
    	MOV DWORD PTR [ESP], offset only
    	CALL printf
    	JMP L28
     
    L27:
    	MOV EAX, DWORD PTR [ESP+24]
    	MOV DWORD PTR [ESP+4], EAX
    	MOV DWORD PTR [ESP], offset several
    	CALL printf
     
    L28:
    	MOV EAX, 0
     
    L25:
    	LEAVE
    	RET
     
    main endp
    J'espère avoir été assez claire.

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Sous Windows, les arguments peuvent se récupérer grâce à l'API GetCommandLine(), qui retourne la ligne de commande complète, qu'il te faudra ensuite analyser toi-même pour analyser les arguments.

    C'est d'ailleurs ce qu'il se passe lorsque tu compiles un programme C, le main() que tu écris n'est pas le point d'entrée réel du programme: le vrai point d'entrée est rajouté lors du link du programme, et c'est lui qui se charge de parser les arguments pour les donner à manger au main

    D'ailleurs, le code source du point d'entrée rajouté par le linker (sous MinGW) est disponible ici: https://sourceforge.net/p/mingw-w64/...t/crt/crtexe.c, à voir si MASM n'a pas sa propre CRT pour faciliter la tâche
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton retour, tout fonctionne parfaitement !

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

Discussions similaires

  1. [WD17] Récupérer des données saisies dans COMBO
    Par XenaMPP dans le forum WinDev
    Réponses: 1
    Dernier message: 29/08/2012, 08h09
  2. Récupérer la date saisie dans l'invite
    Par jedimaster10 dans le forum IHM
    Réponses: 10
    Dernier message: 11/12/2008, 08h03
  3. Réponses: 8
    Dernier message: 15/11/2008, 23h14
  4. récupérer des données saisies dans un fichier
    Par natie_49 dans le forum C++
    Réponses: 6
    Dernier message: 24/11/2005, 11h29
  5. Réponses: 2
    Dernier message: 11/12/2004, 21h20

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