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 :

[NASM] Ligne de commande


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [NASM] Ligne de commande
    Salut à tous !

    Je cherche à faire un fichier COM "copy.com" qui copie simplement un fichier source vers un fichier cible (la fonction copy du dos : C'est juste pour continuer d'apprendre l'assembleur). J'arrive à récupérer les arguments passés au programme dans le PSP à l'adresse 81h et le nombre d'octets de la ligne de commande à l'adresse 80h. Le probleme c'est que je veux stocker ces informations (le chemin d'accès du fichier source et de la cible) dans deux emplacements du segment BSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [segment .bss]
    FICHIERSRC   resb 127;
    FICHIERDEST resb 127;
    je cherche donc le caractère ' ' (espace) entre les 2 paramètres et je place un '$' à la fin de la chaque chaîne. Par contre si j'utilise la fonction 3Ch (createFile) de l'interruption 21h.... et bin, ça marche pas !
    J'ai pensé alors à une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    recupCmdLine       mov si, 81h
    	                mov di, CMDLINE
    	                mov cl, [ds:80h]
    readChar           cmp [ds:si], byte ' '	
    	                jne nextChar
    	                mov [es:di], byte '$'
    	                add di, 42
    nextChar           movsb
    	                dec cl
    	                jnz readChar
    	                mov [es:di], byte '$'
    [segment .bss]
    CMDLINE           resb 127
    Maintenant j'arrive à utiliser la fonction 3Ch et à récupérer plusieurs arguments passés à l'executable, mais je trouve cette solution merdique et tres "bidouille". Avez-vous une solution qui marche bien ? ou carrément un exemple de source 16bits ?

    Pour ceux qui veulent pas se prendre la tête, je veux simplement récupérer les arguments et les stocker dans BSS pour pouvoir les ré-utiliser. Merci d'avance !

  2. #2
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Je sais pas trop si sa vas t'aider, c'est un très vieux programme qui affiche la commande passer, c tout !
    mov [tampon] , [81h]
    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
    			;NASM-IDE ASM Assistant Assembler Project File
    [BITS 16]		;Set code generation to 16 bit mode
    [ORG 0x0100]		;Set code start address to 0100h
    jmp debut
    aff_bin:
    push cx
    push es
    mov cx , 01000b
    push word 0b800h
    pop es
    line:
    inc bx
    inc bx
    rol al , 1
    jb line2
    mov [es:bx] , word 000001100110000b
    jmp suit
    line2:
    mov [es:bx] , word 000001100110001b
    suit:
    loop line
    pop es
    pop cx
    ret
     
    aff_ascii:
    push ax
    push es
    push bx
    mov ax , 0b800h    ; adresse du mode d'‚criture
    mov es , ax        ; passage dans es
    mov ah , 010b      ; couleur du text (2=vert)
    xor bx , bx        ; mise … zero de dx (fonction logique)
    line3:
    mov al , [di+bx]   ; passe au n iŠme charactŠre (bx)
    mov [es:si] , ax   ; ecrit le charactŠre
    inc bx             ; pour passer au charactŠre suivant
    inc si             ; inscremente de 1 si
    inc si             ; inscremente de 1 si place du charactŠre (word 2)
    loop line3
    pop bx
    pop es
    pop ax
     
    ret
    debut:
     
    mov al , [80h]     ; nombre de charactŠres … lire
    mov bx , 142       ; position de d‚part pour l'‚criture (fin premiŠre ligne)
    call aff_bin       ; ecriture en bin
     
     
    cmp al , 0         ; si charactŠre alors il affiche
    je fin
     
    xor cx , cx        ; mise a 0
    mov cl , al        ; nombres de charactŠres
    mov di , word 81h       ; adresse de d‚part de lecture
    mov si , 320       ; position de d‚part pour l'‚criture (3ø ligne)
    call aff_ascii
     
    fin:
     
    mov ah , 4ch
    int 21h

Discussions similaires

  1. Encapsulation graphique d'un outil en ligne de commande
    Par Leishmaniose dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/11/2003, 11h59
  2. Comment compiler un projet en ligne de commande ?
    Par mathieutlse dans le forum EDI
    Réponses: 3
    Dernier message: 11/07/2003, 13h32
  3. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  4. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01
  5. Analyser la ligne de commande
    Par benj29 dans le forum C
    Réponses: 14
    Dernier message: 19/11/2002, 04h13

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