Ouvrir un fichier en assembleur

Résolu
mitchlegeek Messages postés 6 Statut Membre -  
mitchlegeek Messages postés 6 Statut Membre -
Bonjour,

Je souhaiterais savoir comment faire pour manipuler un fichier txt en assembleur...
C'est à dire l'ouvrir en mode lecture, mode écriture, le lire, et écrire à l'intérieur.
J'ai déjà les macro qui permettent de faire ca et je n'arrive pas à les utiliser :

;ouverture de fichier en mode LECTURE

macro ouvrfichl fich1

mov dx, offset fich1
mov ax, seg fich1
mov ds, ax
mov ax, 3d00h ; 3d00h --> mode Lecture
int 21h ; interruption DOS
jc err_1m
mov [handle1], ax
endm

;
; ouverture de fichier en mode écriture

macro ouvrfiche fich2

mov dx, offset fich2
mov ax, seg fich2
mov ds, ax
mov al, 02h
mov ah, 3dh ; ax = 3d02h --> mode écriture
int 21h
jc errouv2
mov [handle2], ax
endm

;
; lecture d'un fichier

macro lectfich handle1, tamp, nbo

mov bx, [handle1]
mov cx, [nbo] ; nombres d'octets qu'on veut lire
mov dx, offset tamp
mov ax, seg tamp
mov ds, ax
mov ax, 3f00h ; Nombre de la fonction du SE DOS pour la lecture
int 21h ; Interruption DOS
jc errlec1
endm

;
;écriture dans un fichier

macro ecrifich handle2, tamp1, nbo

mov bx, [handle2]
mov cx, [nbo] ; nombres d'octets qu'on veut écrire
mov dx, offset tamp1
mov ax, seg tamp1
mov ds, ax
mov ah, 40h
int 21h
jc errecr2
endm

Notamment je ne saisi pas l'utilisation de "handle" et du "tampon"

Merci d'avance.

MitchLegeek....qui pige pas l'assembleur.
Configuration: Windows XP
Firefox 2.0.0.11

14 réponses

  1. mitchlegeek Messages postés 6 Statut Membre 3
     
    Dans mon IUT on compile via l'invité de commande... compile.bat , à base de Tlink et Tasm...
    Au final ça ne répond pas à ma question...
    Mon programme est écrit au Bloc note et il donne ça :

    ideal
    model small
    stack 200h
    include "Nmacros.asm"
    dataseg

    fich1 db 'fic1.txt', 00
    fich2 db 'fic2.txt', 00
    handle1 dw ?
    handle2 dw ?
    tampon db 5 dup (?)
    tampon2 db 5 dup (?)
    mess1 db 'Erreur ouvr mode lectur'
    lmess1 dw $-mess1
    mess2 db 'Erreur ouvr mode ecriture'
    lmess2 dw $-mess2
    mess3 db 'Erreur ecriture'
    lmess3 dw $-mess3
    mess4 db 'Erreur lecture'
    lmess4 dw $-mess4
    codeseg
    debut:
    init

    ouvrfichl fich1
    lectfich handle1,tampon, 5
    ouvrfiche fich2
    ecrifich handle2, tampon2, 5

    jmp fin

    ;......erreurs !!!.....................................

    err_1m:
    ecrire [lmess1], mess1
    mov bx, [handle1]
    mov ah, 3eh
    int 21h
    jmp fin
    errlec1:
    ecrire [lmess2], mess2
    mov ah, 3eh
    int 21h
    jmp fin
    errecr2:
    ecrire [lmess3], mess3
    mov ah, 3eh
    int 21h
    jmp fin
    errouv2:
    ecrire [lmess4], mess4
    mov bx, [handle2]
    mov ah, 3eh
    int 21h
    jmp fin
    ;.......................................................

    fin:
    exit
    end debut

    Je souhaite juste savoir manipuler ces macros... J'espère bien m'exprimer.
    2
  2. mitchlegeek Messages postés 6 Statut Membre 3
     
    "ton probleme c'est que tu lis dans tans 'tampon' mais tu ecris a partir de tampon2 donc il est vide ! utilises un seul tampon "
    --> Modification déjà effectuée ^^

    "5 dup (?) te definit une zone de seulement 5 octects , prends plus , 200 par exemple pour avoir quelques lignes de texte "
    --> En l'occurence je ne voulais que recopier le mot "petit"...Est ce vraiment à l'origine de tout ce texte inbouffable ?

    "il faudrait ensuite recopier un nbre d'octects selon la longueur du fichier et non pas un nombre imposée (ici tout le tampon) attend toi a avoir des caracteres bizarres apres la zone correctement copiée"
    --> Je ne comprend pas très bien ce que je dois faire...et comment ? J'appelle bien mes macros de lecture et écriture avec le paramètre nbo ( nombre d'octet )...c'est pas ça ?

    "Apparrement ton ouverture en lecture et en écriture ont échouées comme on le voit dans le début du message. "
    --> En fait, mon programme ne demande à aucun moment d'écrire les erreurs dans mon fichier...uniquement dans l'invité de commande ( sinon j'aurai utilisé "ecrifich gnagnah..." pour écrire les erreurs
    --> De plus en début de fichier il y a toutes les erreurs et non pas les 2 d'ouverture...Je vous avoue que je suis totalement largué

    "Vérifie bien les valeurs des modes d'ouverture"
    --> Comment faire ?

    "vérifie bien que l'utilisateur est autorisé à écrire dans ce fichier. "
    --> Histoire de lecture seule ?

    "Tu peux tester les valeurs de retour des registre AX (ou les afficher) pour savoir quel est le type d'erreur retourné."
    --> Donc du handle c'est ça ?...ou directement AX ? Genre je le mets dans une variable avant le "jc error" pour l'afficher ensuite ?

    Merci beaucoup en tout cas pour vos réponses, ça me fait vraiment avancer !
    Désolé j'suis un peu chiant, je ne comprends pas tout ^^
    1
    1. juanpablo Messages postés 142 Statut Membre 10
       
      re


      pour la longueur exacte de copie c'était pour fignoler. laissons pour plus tard

      par contre comment as tu visualisé le fichier creé , quand ça affiche des hieroglyphes? peut etre qu'il manque une fin de fichier

      je te propose la manip suivante qui rajoute un zero terminateur au fichier creé
      tampon 5 dup (?) , 0
      tu lis 5 octets dans lecture mais tu ecris 6 octets dans ecriture ( ce qui inclue le zero)

      a+

      (voir macro pour la fonction 42h deplacement pointeur fichier pour trouver longueur fichier)
      0
    2. juanpablo Messages postés 142 Statut Membre 10
       
      re

      je viens de réaliser qu'il manque la fermeture du fichier, en ecriture c'est important

      si tu n'as pas de macro c'est
      mov ah,3Eh
      mov bx, handle_fich
      int 21H
      0
  3. mitchlegeek
     
    SUPER t'es un génie !
    Problème résolu...je récapitule pour les futurs visiteurs :

    Je voulais un prog en ASM permettant d'ouvrir un fichier1 ( fic1.txt) en mode lecture, lire ce fichier, ouvrir un fichier2 ( fic2.txt) en mode écriture et recopier le contenu du premier dans celui-ci.

    Nmacros.asm__________________
    ;
    ;ouverture de fichier en mode LECTURE

    macro ouvrfichl fich1

    ; fich1 = adresse mémoire où se trouve le nom du fichier
    ; handle1 = adresse mémoire avec handle sauvegardé
    ; les registres ax, bx, dx sont modifiés

    mov dx, offset fich1
    mov ax, seg fich1
    mov ds, ax
    mov ax, 3d00h ; 3d00h --> mode Lecture
    int 21h ; interruption DOS
    jc err_1m
    mov [handle1], ax
    endm

    ;
    ; ouverture de fichier en mode écriture

    macro ouvrfiche fich2

    ; fich2 = adresse mémoire où se trouve le nom du fichier
    ; handle2 = adresse mémoire avec handle sauvegardé
    ; les registres ax, bx, dx sont modifiés
    mov dx, offset fich2
    mov ax, seg fich2
    mov ds, ax
    mov al, 02h
    mov ah, 3dh ; ax = 3d02h --> mode écriture
    int 21h
    jc errouv2
    mov [handle2], ax
    endm

    ;
    ; lecture d'un fichier

    macro lectfich handle1, tamp, nbo

    ; tamp = adresse de début de la zone
    ; handle1 = adresse mémoire avec handle sauvegardé
    ; les registres ax, bx, cx, et dx sont modifiés

    mov bx, [handle1]
    mov cx, [nbo] ; nombres d'octets qu'on veut lire
    mov dx, offset tamp
    mov ax, seg tamp
    mov ds, ax
    mov ax, 3f00h ; Nombre de la fonction du SE DOS pour la lecture
    int 21h ; Interruption DOS
    jc errlec1
    endm

    ;
    ;écriture dans un fichier

    macro ecrifich handle2, tamp1, nbo
    ; tamp1 = adresse de début de la zone
    ; handle2 = adresse mémoire avec handle sauvegardé
    ; les registres ax, bx, cx, dx sont modifiés
    mov bx, [handle2]
    mov cx, [nbo] ; nombres d'octets qu'on veut écrire
    mov dx, offset tamp1
    mov ax, seg tamp1
    mov ds, ax
    mov ah, 40h
    int 21h
    jc errecr2
    endm

    ;
    ;fermeture de fichier

    macro ferme handle

    mov bx, [handle]
    mov ah, 3eh
    int 21h
    endm

    ______________________________________________

    Prog ASM
    _______________________________________________

    ; Manipulation de fichier en ASM
    ; Nom du fichier : Test.asm
    ; Date d’ecriture : 30 Dec. 2007
    ; Objet : Programme ouvrant un fihier, le lisant,
    ; et le recopiant dans un 2eme fichier

    ideal
    model small
    stack 200h
    include "Nmacros.asm"
    dataseg

    fich1 db 'fic1.txt', 00
    fich2 db 'fic2.txt', 00
    handle1 dw ?
    handle2 dw ?
    taille dw ?
    tampon db 200 dup (?),0
    mess1 db 'Error ouvr mode lectur'
    lmess1 dw $-mess1
    mess2 db 'Error ouvr mode ecriture'
    lmess2 dw $-mess2
    mess3 db 'Error ecriture'
    lmess3 dw $-mess3
    mess4 db 'Error lecture'
    lmess4 dw $-mess4
    codeseg
    debut:
    init

    ouvrfichl fich1

    mov bx,[handle1]
    sub cx, cx
    sub dx, dx
    mov ax, 4202h
    int 21h
    mov [taille],ax
    sub cx,cx
    sub dx,dx
    mov ax, 4200h
    int 21h

    lectfich handle1,tampon, taille
    ouvrfiche fich2
    ecrifich handle2, tampon, taille

    ferme handle1
    ferme handle2

    jmp fin

    ;......erreurs !!!.....................................

    err_1m:
    ecrire [lmess1], mess1
    ferme handle1
    errlec1:
    ecrire [lmess2], mess2
    ferme handle1
    errecr2:
    ecrire [lmess3], mess3
    ferme handle2
    errouv2:
    ecrire [lmess4], mess4
    ferme handle2
    ;.......................................................

    fin:
    exit
    end debut
    ________________________________________________

    En espérant que ça en aide d'autres.
    1
  4. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Sorry, je n'avais pas bien compris et je ne pige pas plus l'Assembler que toi!
    J'ai trouvé un spécialiste (regarde ce post, soumet-lui directement ton problème : http://www.commentcamarche.net/communaute/profil ekra

    @+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mitchlegeek Messages postés 6 Statut Membre 3
     
    Petit up....
    S'il vous plait.
    Personne ne 'sy connait en assembleur ?
    0
  7. ekra Messages postés 1873 Statut Membre 342
     
    Bonjour,

    Je ne suis pas un expert de l'assembleur mais je veux bien essayer de t'aider :p

    Pour le Handle:
    Lorsque tu ouvres ton fichier, le système d'exploitation (DOS) identifie ton fichier avec un numero (handle) que tu récupères pour te servir de ce fichier plus tard.

    Pour le tampon:
    Lorsque tu vas lire ton fichier, il faut mettre dans une zone mémoire temporaire les données. C'est la zone mémoire dédiée pour cela qui est nommée tampon.

    handler et tampon semblent être juste des pointeurs.

    Regarde un peu ici si tu veux plus d'aide :
    http://cui.unige.ch/DI/cours/1840/tips/asm/int21.html

    Bonne soirée.
    0
  8. mitchlegeek Messages postés 6 Statut Membre 3
     
    Merci beaucoup
    J'ai fait quelques progrès....maintenant quand je compile mon prog ca me recopie bien le contenu du fichier1 ( yataaa ! ) mais après je me tape 500 lignes de textes "inbouffable" juste à la suite...en voici un extrait ( âme sensible s'abstenir ) :

    _______________________________________________________________________________
    petit Error ouvr mode lectur Error ouvr mode ecriture Error ecriture Error lecture
    p@ tx pRU b2ûRŽ $ ` 8 „ L p f parameter$bad A20 on parameter$bad switch parameter$insufficient extended memory$cannot create FRET$cannot create linear address space$cannot create system linear space$cannot copy kernel to high memory$undefined error$unable to copy DOSX$unable to copy IDT$unable to create int chain table$unable to create PM stack$unable to initialize swapping$à!ààààààààààààóóóóóóóóóàóóóààà8óM`s“à: $unrecognized error$internal error$out of memory$out of selectors$out of internal tables$invalid dynamic link$couldn't open file$invalid exe format$wrong version$cannot initialize$DLL initialization error$,-@@L,,,,,,,,,,,LLarLƒLL“L®ÂLLLL ™ ¡ & & & & $needs at least 286$can't find $unexpected DOS error$file not found: $path not found: $access denied: $not enough memory to load $invalid environment$invalid file $
    $ÏêK3Ïê SR¸#5Í!.‰Õ.Œ×¸#%ºÓÍ!¸5Í!.‰Û.ŒÝ¸%ºÙÍ!Z[ÃSR.¡Û.ÝÀt(¸%.‹Û.ŽÝÍ!¸#%.‹Õ.Ž×Í!3À.£Û.£ÝZ[Ãû¸ 3Í!.ˆX¸3² Í!Ã.ŠX€úût¸3Í!.ÆXûù& ƒÁÁéŒÀŒË+ØÙ¸ JÍ!séxè@ÿè·ÿ÷â t¡àèNø= tè5ën÷â t%ŒØŽÀ»FºT¸ KÍ!séD¸ MÍ!= tèä ëBèÿ¸Bû»‹àÍ/= u
    ‹Â=ÿÿtèà ¸ÿ ÷â tP¸Bû»Í/XPèøþèFÿX´LÍ!èíþè;ÿ¸ÿLÍ!÷à u‹ò¹ÿÿü¬<$t< tâõ÷Ùƒé» ¸ @Í!Ã0123456789ABCDEFXXXP‹ûƒÇ3Û¹ ‹Øƒã.ŠŸ\ˆOÁèâîè¦ÿXÃPºè»ôèÔÿºÝè”ÿ[Sãÿ Ñã‹—¬è…ÿ[ãÿ Ñã‹—ìƒú tèrÿºÐèlÿÃPº»è›ÿºÝè[ÿ[ãÿ Ñã‹—èMÿºÐèGÿÃPºú»èvÿºÝè6ÿ[ãÿÑã‹— è(ÿºÐè"ÿø èwÿé
    ÿ ènÿéÿC:\DOCUME~M G EMI~1\BUREACOMSPEC=C:\WINDOWS\SYSTEM32\COMMAND.COM ALLUSERSPROFILE=C:\DOCUME~1\ALLUSE~1 APPDATA=C:\DOCUME~1\PCDEMI~1\APPLIC~1 CLIENTNAME=Console COMMONPROGRAMFILES=C:\PROGRA~1\FICHIE~1 COMPUTERNAME=TOSHIBA FP_NO_HOST_CHECK=NO HOMEDRIVE=C: HOMEPATH=\Documents and Settings\PC de Mitch LOGONSERVER=\\TOSHIBA NUMBER_OF_PROCESSORS=2 OS=Windows_NT PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\PROGRA~1\Autodesk\BACKBU~1\;C:\PROGRA~1\FICHIE~1\GTK\2.0\bin PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH PROCESSOR_ARCHITECTURE=x86 PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 6, GenuineIntel PROCESSOR_LEVEL=6 PROCESSOR_REVISION=0f06 PROGRAMFILES=C:\PROGRA~1 PROMPT=$P$G PYTHONPATH=C:\windows\system32\python24.zip;C:\python24;C:\python24DLLs;C:\python24\lib;C:\python24\lib\plat-win;C:\python24\lib\lib-tk;C:\python24\lib\site-packages SESSIONNAME=Console SYSTEMDRIVE=C: SYSTEMROOT=C:\WINDOWS TEMP=C:\WINDOWS\TEMP TMP=C:\WINDOWS\TEMP USERDOMAIN=TOSHIBA USERNAME=PC de Mitch USERPROFILE=C:\DOCUME~1\PCDEMI~1 BLASTER=A220 I5 D1 P330 T3 C:\DOCUME~1\PCDEMI~1\BUREAU\COURSI~1\ARCHIT~1\PROJET~1\TDETTASM\rtm.exe R3í±è_<M ªtNrtm t <eÍ õ šðþðoÓ‡V3Rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡2j¹â Kÿÿÿÿ Í!Ë V TEST OBJ /v test.obj
    sm
    A0
    sse de port d'E/S de base SB non valide. Par exemple :
    Ÿ 0123456789ABCDEFS‹ØƒãIãÑêÑØÑêÑØÑêÑØÑêÑØèäÿ.Š— ¸ Í![ÃPQR¹ èÏÿZYXÃPQR¹ èÂÿZYXÃPQR¹ èµÿZYXÃã PQRè©ÿZYXø ŽØ¸´ » ŽÐ‹ã‰& &¡ ŽÀ&; té” œë{RTM loader version 1.5 Copyright (c) 1990-94 Borland International
    This loader is invoked and required by Borland tools
    $PRº– ¸ Í!ZX¸ LÍ!&> 16té`ÿ&>STtéTÿ&>UBtéHÿ.Œ Œ Œ Œ Œ »}%+ ¸ JÍ!è\s°%éuŒ
    Œ Œ Œ ŒË¸
    Í1£ Ž &Œ ¹}%éõ ‹ÙÁëÁá¸Í1s¸ é4‰ ‰ ‰> ‰6 ¸ ¹ Í1s¸ é£ £ £ £" ¸ ‹ ËÁéƒÉ
    Í1¸ ‹ ‹ ‹ Í1‹ Í1ºCêõ ‹ÊÁéÁ⸠‹ Í1¸ ‹ ºCêõ B‹ÊÁéÁâƒêƒÙ Í1‹ Í1¸ ‹ º}%êCB‹ÊÁéÁâƒêƒÙ Í1¸ ‹ º´ ê B‹ÊÁéÁâƒêƒÙ Í1èT Ž ¹ ¾ ¿ð(üó¥èC»õ + ¸ JÍ!è`hÒÿ6 h ÿ6 Ë= uèèjºõ + ¸ 1Í!° ´LÍ!¸ ‹" ºÿÿ¹ Í1ºõ ‹ÊÁéÁ⸠‹" Í1¹Céõ ÁáüŽ Ž" 3ö3ÿó¥ºC‹ÊÁéÁ⸠‹" Í1¹}%éCÁᎠŽ" 3ö3ÿó¥Ã0123456789ABCDEFS‹ØƒãIãÑêÑØÑêÑØÑêÑØÑêÑØèäÿ.Š—a¸ Í![ÃPQR¹ èÏÿZYXÃPQR¹ èÂÿZYXÃPQR¹ èµÿZYXÃã PQRè©ÿZYXø‡Í/= téƒ Œv ‰>t …öt@SQR¸+¹EDºQSÍ!<ÿtÆÿæÿý¸ XÍ!P» ¸XÍ!‹Þ¸ HÍ![œP¸XÍ!XZY[r;ŽÀ3Àÿt r3¸Í1‰z ‰x ‰6~ ‰>| ¸Í1£€ ‰„ ‰‚ ‰6ˆ ‰>† øÃùÃùÃùÃWP‹>Џ ÿ† ¡€ ŠX_ËWP‹>Œ¸ ÿ‚ ¡€ ŒX_ËWP‹>ŠÿŠ t¡€ )Š+ø¸ ÿ† X_ËWP‹>ŒÿŠt¡€ )Œ+ø¸ ÿ‚ X_ËU‹ì.Ž èxÿ£Ž‰‰’‰”‰>–‰6˜‹F £š‹F£œ‹F£ž‹F‹N
    ‹V‹^¾[¿)ÿ.| PPU‹ìP¸ ŽØè‚ÿ¡Ž‰Fü‹‹’‹”‹>–‹6˜¡š‰F ¡œ‰F¡ž‰FX]ËU‹ìh è ÿ£Ž‰‰’‰”‰>–‰6˜‹F £š‹F£œ‹F£ž‹F‹N
    ‹V‹^‹6 ¿´ÿ.x PPU‹ìP.Ž èÔþ¡Ž‰Fü‹‹’‹”‹>–‹6˜¡š‰F ¡œ‰F¡ž‰FX]ËP‹Äÿ6 hÿ6 ÿ6 ÿ6 PèÏþXø ¿$ ÿ† ÃP‹Äÿ6 h;ÿ6 ÿ6
    ÿ6 Pè.ÿXÃVWPQRSè—þVWPQRSèÿË=t
    =Bûuéé êŒ÷ uõRPº~¸ Í!XZ¹ ÏYou have attempted to run Windows in enhanced mode while
    running in a shell under a protected mode program. This
    is not a compatible configuration. Run Windows in standard

    [........vous multipliez ça par 5 à peu près....]

    _____________________________________________________________________

    NB : "petit" est le mot que je voulais recopier ( cf. début de ce texte )
    0
    1. juanpablo Messages postés 142 Statut Membre 10
       
      salut

      il faut bien comprendre que ' tampon' est la zone mémoire où tu lis et ecris, il faut tout definir en assembleur

      ton probleme c'est que tu lis dans tans 'tampon' mais tu ecris a partir de tampon2 donc il est vide ! utilises un seul tampon

      autres remarques
      5 dup (?) te definit une zone de seulement 5 octects , prends plus , 200 par exemple pour avoir quelques lignes de texte

      il faudrait ensuite recopier un nbre d'octects selon la longueur du fichier et non pas un nombre imposée (ici tout le tampon) attend toi a avoir des caracteres bizarres apres la zone correctement copiée
      0
  9. ekra Messages postés 1873 Statut Membre 342
     
    Apparrement ton ouverture en lecture et en écriture ont échouées comme on le voit dans le début du message.
    Vérifie bien les valeurs des modes d'ouverture et sinon vérifie bien que l'utilisateur est autorisé à écrire dans ce fichier.

    Tu peux tester les valeurs de retour des registre AX (ou les afficher) pour savoir quel est le type d'erreur retourné.

    Bye.
    0
  10. mitchlegeek
     
    Ok merci je tente ça dès demain ^^
    Bonne année à vous d'ici là...
    0
  11. mitchlegeek
     
    Petite mise à jour des différentes modifications ^^
    1) Nouvelle macro :

    ;
    ;fermeture de fichier

    macro ferme handle

    mov bx, [handle]
    mov ah, 3eh
    int 21h
    jmp fin
    endm

    2) "Nouveau" prog

    ; Manipulation de fichier en ASM
    ; Nom du fichier : Test.asm
    ; Date d’ecriture : 30 Dec. 2007
    ; Objet : Programme ouvrant un fihier, le lisant,
    ; et le recopiant dans un 2eme fichier

    ideal
    model small
    stack 200h
    include "Nmacros.asm"
    dataseg

    fich1 db 'fic1.txt', 00
    fich2 db 'fic2.txt', 00
    handle1 dw ?
    handle2 dw ?
    tampon db 200 dup (?),0
    mess1 db 'Error ouvr mode lectur'
    lmess1 dw $-mess1
    mess2 db 'Error ouvr mode ecriture'
    lmess2 dw $-mess2
    mess3 db 'Error ecriture'
    lmess3 dw $-mess3
    mess4 db 'Error lecture'
    lmess4 dw $-mess4
    codeseg
    debut:
    init

    ouvrfichl fich1
    lectfich handle1,tampon, 5
    ouvrfiche fich2
    ecrifich handle2, tampon, 5

    ferme handle1
    ferme handle2

    jmp fin

    ;......erreurs !!!.....................................

    err_1m:
    ecrire [lmess1], mess1
    ferme handle1
    errlec1:
    ecrire [lmess2], mess2
    ferme handle1
    errecr2:
    ecrire [lmess3], mess3
    ferme handle2
    errouv2:
    ecrire [lmess4], mess4
    ferme handle2
    ;.......................................................

    fin:
    exit
    end debut
    _______________________________________________________

    Voili voilou ^^
    A l'éxécution j'ai bien mon mot du fich1 recopié ( yataa ) mais toujours ce texte inbouffable à la suite...
    Je sais, suis chiant...mais vous me faites avancer alors j'continue à vous demander :)
    0
    1. juanpablo Messages postés 142 Statut Membre 10
       
      bonjour , bonne année

      pas de probleme , si on vient ici c'est pour trouver de l'aide ou en apporter si on peut

      la macro ferme force un saut à fin il faut le supprimer
      de ce fait la ligne
      ferme handle1
      envoie le programme à fin et on ne passe jamais par
      ferme handle2
      le fichier ecrit n'est toujours pas fermé


      ce code place le pointeur en fin de fichier donc donne la longueur du fichier en ax (pour taille < 64k ) puis le remet en debut
      mov bx,[ handle]
      sub cx, cx
      sub dx, dx
      mov ax, 4202h
      int 21h
      mov [taille],ax
      sub cx,cx
      sub dx,dx
      mov ax, 4200h
      int 21h

      placé apres l'ouverture du premier fichier ça met dans la variable
      taille dw ?
      le nbre d'octets du fichier
      si on remplace le 5 par taille ça marche pour des fichiers ou on change 'petit' par autre chose, tant que le tampon est assez grand !

      bonne continuation
      0
  12. NIN
     
    C'est bizarre mais moi ce que t'écris j'arrive pas à le compiler. Quelqu'un sait pourquoi ?
    0
  13. mitchlegeek Messages postés 6 Statut Membre 3
     
    Je sais pas pour toi mais moi je compile via l'invité de commande windows...avec un compile.bat à base de Tlink et Tasm.

    Pour les macros...Bien je sais pas...vous avez bien créé le fichier Nmacros.asm, le fichier fic1.txt avec un texte dedans ?....le fic2.txt de destination ?

    Qu'est ce qui ne fonctionne pas exactement ?
    0
  14. Rocksy Messages postés 514 Date d'inscription   Statut Membre Dernière intervention   73
     
    Bonjour,

    Le fichier texte sert juste à éditer, écrire et/ou modifier des routines en Assembler. Il faut ensuite le compiler grace à un compilateur pour le transformer en language machine.
    Initiation à l'Assembler :
    https://www.commentcamarche.net/contents/15-introduction-a-l-assembleur
    https://asm.developpez.com/intro/

    @+
    -2