Ouvrir un fichier en assembleur

Résolu/Fermé
mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 - 28 déc. 2007 à 18:16
mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 - 3 janv. 2008 à 23:24
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.
A voir également:

14 réponses

mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 3
28 déc. 2007 à 19:02
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
mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 3
31 déc. 2007 à 13:02
"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
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 10
31 déc. 2007 à 13:48
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
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 10
31 déc. 2007 à 15:13
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
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
Rocksy Messages postés 509 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 31 décembre 2007 73
28 déc. 2007 à 19:27
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 3
29 déc. 2007 à 15:49
Petit up....
S'il vous plait.
Personne ne 'sy connait en assembleur ?
0
ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 342
30 déc. 2007 à 22:24
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
mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 3
31 déc. 2007 à 03:59
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èà ¸ÿ ÷â t P¸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Í!XZY[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
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 10
31 déc. 2007 à 12:27
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
ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 342
31 déc. 2007 à 11:10
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
Ok merci je tente ça dès demain ^^
Bonne année à vous d'ici là...
0
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
juanpablo Messages postés 142 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 16 juin 2008 10
2 janv. 2008 à 03:35
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
C'est bizarre mais moi ce que t'écris j'arrive pas à le compiler. Quelqu'un sait pourquoi ?
0
Au temps pour moi, problème de macro...
0
mitchlegeek Messages postés 6 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 3 janvier 2008 3
3 janv. 2008 à 23:24
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
Rocksy Messages postés 509 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 31 décembre 2007 73
28 déc. 2007 à 18:34
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