begin process at 2010 03 11 19:50:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications ms-dos

 > EDITEUR DE TEXTE SIMPLE (SANS MODIFICATION DU TEXTE)

EDITEUR DE TEXTE SIMPLE (SANS MODIFICATION DU TEXTE)


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications ms-dos Classé sous :éditeur, édite, texte, notepad, blocnote Niveau :Débutant Date de création :28/06/2005 Vu :3 799

Auteur : izel

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

voila mon premier programme en Assembleur.
C'est un petit éditeur de texte, qui permet : créer un fichier
                                              ensuite d'écrire dans le fichier
                                              Lire un Fichier
Je fais qui lise que 200 caractère mais ça peut être modifier facilement
Si vous avez des questions j'essairai d'y répondre

(Désolé pour les fautes d'ortographe j'ai jamais été fort ^^)

Source

  • TITLE Editeur de Texte By Brait Loic
  • COMMENT @
  • Petit éditeur de texte permettant de lire/écrire un fichier
  • -Edition de texte d'acheve avec un compinaison de touche
  • -La touche return marche normalement
  • -Utilisateur est invite à entrée le nom du fichier
  • -Organisation du fichier est libre
  • Auteur: Brait Loic
  • Date de crétion: 22.05.05
  • Dernière modification: 22.05.05
  • Révison
  • @
  • .MODEL small
  • .STACK 100h
  • .DATA
  • nCarMaxMenu DB 2
  • nCarLuMenu DB ?
  • strLuMenu DB 2 DUP(?)
  • nCarMaxNom DB 9
  • nCarLuNom DB ?
  • strLuNom DB 13 DUP(0)
  • texte DB 200 DUP(?),'$'
  • handleFichier DW ?
  • handleFichierE DW ?
  • BufferTexte DB 200 DUP(?),'$'
  • ;Message d erreur -------------------------------------
  • FileSharingT DB 'Pas de logiciel de File Sharing$'
  • nonFichierT DB 'Fichier non trouve$'
  • cheminFauxT DB 'Chemin non trouve$'
  • plusHandleT DB 'Plus de Handle libre$'
  • accesRefuseT DB 'Acces Refuse$'
  • nonHandleT DB 'Handle non autorise ou fichier correspondant non ouvert$'
  • nonModeT DB 'Mode d acces non autorise$'
  • ;-----------------
  • ;Texte du pogramme -------------------------------------
  • textMenu DB 'Voici un editeur de texte qui a etait code en Assembleur par Brait Loic',13d,10d,'Choisissez l opperation$'
  • choixMenu DB '1. Nouveau Fichier',13,10,'2. Lire Fichier','$'
  • mauvaisChoixT DB 'LE CHOIX QUE VOUS AVEZ FAIT N EST PAS CORRECTE REFAITE LE !!!$'
  • entreeNom DB 'Veuillez entrez le nom du fichier (sans extension)$'
  • entreeTexteT DB 'Veuillez entrez le texte du fichier',13,10,'Pour Quitter Pressez la touche DOLLARD$'
  • ;----------------------
  • ;Mise en page------------
  • extension DB '.txt$'
  • etoile DB '*$'
  • retourT DB 13,10
  • retour DB 13,10,'$'
  • blanc DB ' $'
  • ;-------------------------
  • .CODE
  • main PROC
  • MOV ax,@data
  • MOV ds,ax
  • ;*************************************
  • ;Debut du progrmamme =================
  • ;Nettoyage des registres
  • SUB AX,AX
  • SUB BX,BX
  • SUB CX,CX
  • SUB DX,DX
  • SUB SI,SI
  • SUB DI,DI
  • LEA DX,textMenu
  • CALL afficheTexte ;Affiche le texte
  • LEA DX,retour
  • CALL afficheTexte ;Affiche un espace
  • mauvaischoix:
  • LEA DX,choixMenu
  • CALL afficheTexte ;Affiche le choix
  • LEA DX,nCarMaxMenu
  • CALL demandeTexte ;Demande le choix
  • MOV AL,[strLuMenu]
  • CALL transASCII ;le choix transformer en nombre
  • MOV AH,1d
  • CMP AH,AL
  • JZ nouveau ;choix Nouveau Fichier
  • MOV AH,2d
  • CMP AH,AL
  • JZ lire ;choix lire et ecrire un fichier
  • ;Choix pas correcte -----------------------------
  • LEA DX,retour
  • CALL afficheTexte ;Affiche un espace
  • LEA DX,mauvaisChoixT
  • CALL afficheTexte
  • JMP mauvaisChoix ;Mauvais Choix effectuer
  • nouveau: ;---------------------------------------------------------
  • LEA DX,entreeNom
  • CALL afficheTexte ;Affiche le texte de la demande su nom
  • LEA DX,nCarMaxNom
  • CALL demandeTexte ;Demande le nom du fichier
  • ;Ajoute le .txt$ au nom
  • CALL ajouteExt
  • ;Cree le fichier
  • LEA DX,strLuNom
  • CALL nouveauFichier
  • MOV handleFichier,AX
  • JMP ecrire ;pour ecrire dans le fichier
  • lire: ;----------------------------------------------------------------
  • ;Affiche le texte de la demande de nom
  • LEA DX,entreeNom
  • CALL afficheTexte
  • ;Demande le nom du fichier
  • LEA DX,nCarMaxNom
  • CALL demandeTexte
  • ;Ajouter l extension
  • CALL ajouteExt
  • ;Ouvrir le fichier
  • LEA DX,strLuNom
  • MOV CX,10100010b ;Mode d'acces (lecture/ecriture, lecture seul pour les autres prog, seul le prg actuel peut accéder)
  • CALL ouvrirFichier
  • MOV handleFichier,AX
  • ;Lire le fichier
  • LEA DX, BufferTexte
  • MOV BX,handleFichier
  • MOV CX,200 ;taille du buffer
  • CALL lireFichier
  • ;Afficher le texte du fichier
  • LEA DX,BufferTexte
  • CALL afficheTexte
  • ;Fermer le Fichier
  • MOV BX,handleFichier
  • CALL fermerFichier
  • CALL quitter ;Arreter le prg
  • ecrire: ;----------------------------------------------------------
  • ;Afficher la Demander d'ecrire le texte
  • LEA DX,entreeTexteT
  • CALL afficheTexte
  • MOV CX,200d
  • SUB DI,DI
  • boucleTexte:
  • ;Demander le texte
  • CALL ecrireTexte
  • MOV [texte+DI],AL
  • ;Tester Si la touche est ENTER----------
  • MOV AH,0Dh
  • CMP AH,AL
  • JZ aLaLigne
  • ;Tester Si c'est la touchre BackSpace-------
  • MOV AH,8h
  • CMP AH,AL
  • JZ backSpace
  • ;Tester Si c'est pour quitter------------
  • MOV AH,24h
  • CMP AH,AL
  • JZ quitterLePrg
  • JMP normal
  • aLaLigne: ;++++++++++++++++++++++++++++++
  • ;Ecrire dans le fichier
  • LEA DX,retourT
  • MOV BX,handleFichier
  • SUB CX,CX
  • MOV CL,2 ;nombre de caractère a ecrire
  • CALL ecrireFichier
  • ;Afficher la lettre
  • LEA DX,blanc
  • CALL afficheTexte
  • JMP continue
  • backSpace: ;++++++++++++++++++++++++++++++
  • ;Ecrire dans le fichier
  • JMP continue
  • quitterLePrg: ;+++++++++++++++++++++++++++
  • ;Fermer le Fichier
  • MOV BX,handleFichier
  • CALL fermerFichier
  • ;Quitter le Programme
  • CALL quitter
  • normal:
  • PUSH CX
  • ;Ecrire normalement une lettre++++++++++++++
  • ;Ecrire dans le fichier
  • LEA DX,[texte+DI]
  • MOV BX,handleFichier
  • SUB CX,CX
  • MOV CL,1 ;nombre de caractère a ecrire
  • CALL ecrireFichier
  • ;Afficher la lettre
  • INC DI
  • MOV [texte+DI],24h
  • DEC DI
  • LEA DX,[texte+DI]
  • CALL afficheTexteEcrire
  • continue:
  • POP CX
  • INC DI
  • LOOP boucleTexte
  • ;Fermer le Fichier
  • MOV BX,handleFichier
  • CALL fermerFichier
  • ;Fin du programme =======================
  • ;****************************************
  • MOV ah,4ch
  • MOV al,0
  • INT 21h
  • main ENDP
  • ;#####################################
  • afficheTexte PROC USES AX
  • ;Affiche le texte envoyé
  • ;Entrée DX : offset du texte à afficher
  • ;
  • ;Sortie Texte à l'écran
  • ;#####################################
  • MOV AH,09h
  • INT 21h
  • ;retour a la ligne------------------
  • LEA DX,retour
  • MOV AH,09h
  • INT 21h
  • RET
  • afficheTexte ENDP
  • ;#####################################
  • afficheTexteEcrire PROC USES AX
  • ;Affiche le texte envoyé
  • ;Entrée DX : offset du texte à afficher
  • ;
  • ;Sortie Texte à l'écran
  • ;#####################################
  • MOV AH,09h
  • INT 21h
  • RET
  • afficheTexteEcrire ENDP
  • ;#####################################
  • demandeTexte PROC USES AX
  • ;Demande le texte et le met dans un tableau
  • ;Entrée DX : offset du Tableau (interuption)
  • ;
  • ;Sortie Aucune
  • ;#####################################
  • ;entree la valeur ------------------------
  • MOV AH,0Ah ;fonction
  • INT 21h ;interruption
  • ;retour a la ligne--------------------
  • LEA DX,retour
  • MOV AH,09h
  • INT 21h
  • RET
  • demandeTexte ENDP
  • ;#####################################
  • ecrireTexte PROC
  • ;Pour ecrire du texte demande lettre par lettre
  • ;Entrée -
  • ;
  • ;Sortie AL : caractère ecrit
  • ;#####################################
  • ;entree la valeur ------------------------
  • MOV AH,07h ;fonction
  • INT 21h ;interruption
  • RET
  • ecrireTexte ENDP
  • ;#####################################
  • transASCII PROC
  • ;Transforme un nombre ASCII en chiffre
  • ;Entrée AL : nombre en ASCII
  • ;
  • ;Sortie AL : nombre en chiffre
  • ;#####################################
  • SUB AL,48d
  • RET
  • transASCII ENDP
  • ;#####################################
  • ajouteExt PROC
  • ;Ajoute à la fin du nom du fichier l'extension avec le signe de fin
  • ;Entrée strLuNom : nom du fichier
  • ; nCarLuNom : nombre caractere entrée
  • ;
  • ;Sortie -
  • ;#####################################
  • SUB AH,AH
  • MOV AL,nCarLuNom
  • MOV SI,AX
  • ;.txt$
  • MOV [strLuNom+SI],46d
  • INC SI
  • MOV [strLuNom+SI],116d
  • INC SI
  • MOV [strLuNom+SI],120d
  • INC SI
  • MOV [strLuNom+SI],116d
  • INC SI
  • MOV [strLuNom+SI],24h
  • RET
  • ajouteExt ENDP
  • ;#####################################
  • nouveauFichier PROC
  • ;Cree un nouveau fichier
  • ;Entrée DS : @segment du nom du fichier
  • ; DX : @offset du nom du fichier
  • ;
  • ;Sortie -
  • ;#####################################
  • MOV AH,3Ch
  • INT 21h
  • ;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
  • JNC pasLancerAffichageErreurNouveau
  • CALL typeErreur
  • pasLancerAffichageErreurNouveau:
  • RET
  • nouveauFichier ENDP
  • ;#####################################
  • ouvrirFichier PROC
  • ;Ouvre un fichier
  • ;Entrée DS : @segment du nom du fichier
  • ; DX : @offset du nom du fichier
  • ; AL : Mode d'accès
  • ;
  • ;Sortie AX : OK(Handle) ou Code erreur
  • ;#####################################
  • SUB AX,AX
  • MOV AH,3Dh
  • INT 21h
  • ;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
  • JNC pasLancerAffichageErreurOuvrir
  • CALL typeErreur
  • pasLancerAffichageErreurOuvrir:
  • RET
  • ouvrirFichier ENDP
  • ;#####################################
  • typeErreur PROC USES BX
  • ;Indique le Type d'erreur (Optimisation faire relancer le prg)
  • ;Entrée AX : Code de l erreur
  • ;
  • ;Sortie Affiche à l ecran le type d erreur
  • ;#####################################
  • MOV BX,1
  • CMP AX,BX
  • JZ FileSharing
  • MOV BX,2
  • CMP AX,BX
  • JZ nonFichier
  • MOV BX,3
  • CMP AX,BX
  • JZ cheminFaux
  • MOV BX,4
  • CMP AX,BX
  • JZ plusHandle
  • MOV BX,5
  • CMP AX,BX
  • JZ accesRefuse
  • MOV BX,6
  • CMP AX,BX
  • JZ nonHandle
  • MOV BX,12
  • CMP AX,BX
  • JZ nonMode
  • ;Erreur de manque de logiciel de File Sharing
  • FileSharing:
  • LEA DX,FileSharingT
  • CALL afficheTexte
  • CALL quitter
  • ;Fichier non trouvé
  • nonFichier:
  • LEA DX,nonFichierT
  • CALL afficheTexte
  • CALL quitter
  • ;Chemin non trouvé
  • cheminFaux:
  • LEA DX,cheminFauxT
  • CALL afficheTexte
  • CALL quitter
  • ;Plus de Handle libre
  • plusHandle:
  • LEA DX,plusHandleT
  • CALL afficheTexte
  • CALL quitter
  • ;Acces Refusé
  • accesRefuse:
  • LEA DX,accesRefuseT
  • CALL afficheTexte
  • CALL quitter
  • ;Handle non autorise ou fichier correspond non ouvert
  • nonHandle:
  • LEA DX,nonHandleT
  • CALL afficheTexte
  • CALL quitter
  • ;Mode d acces non autorise
  • nonMode:
  • LEA DX,nonModeT
  • CALL afficheTexte
  • CALL quitter
  • RET
  • typeErreur ENDP
  • ;#####################################
  • lireFichier PROC USES BX CX
  • ;lire un fichier
  • ;Entrée DS : @segment du buffer
  • ; DX : @offset du buffer
  • ; BX : Handle du fichier
  • ; CX : Nombre d octel a lire
  • ;
  • ;Sortie AX : nbr d octels lus ou Code erreur
  • ;#####################################
  • SUB AX,AX
  • MOV AH,3Fh
  • INT 21h
  • ;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
  • JNC pasLancerAffichageErreurLire
  • CALL typeErreur
  • pasLancerAffichageErreurLire:
  • RET
  • lireFichier ENDP
  • ;#####################################
  • fermerFichier PROC
  • ;ferme un fichier
  • ;Entrée BX : Handle à fermer
  • ;
  • ;Sortie AX : OK(Handle) ou Code erreur
  • ;#####################################
  • SUB AX,AX
  • MOV AH,3Eh
  • INT 21h
  • ;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
  • JNC pasLancerAffichageErreurFermer
  • CALL typeErreur
  • pasLancerAffichageErreurFermer:
  • RET
  • fermerFichier ENDP
  • ;#####################################
  • ecrireFichier PROC USES BX CX
  • ;ecrire dans un fichier
  • ;Entrée DS : @segment du buffer
  • ; DX : @offset du buffer
  • ; BX : Handle du fichier
  • ; CX : Nombre d octel a ecrire
  • ;
  • ;Sortie AX : nbr d octels lus ou Code erreur
  • ;#####################################
  • SUB AX,AX
  • MOV AH,40h
  • INT 21h
  • ;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
  • JNC pasLancerAffichageErreurLire
  • CALL typeErreur
  • pasLancerAffichageErreurLire:
  • RET
  • ecrireFichier ENDP
  • ;#####################################
  • quitter PROC
  • ;quitter le prg
  • ;Entrée -
  • ;
  • ;Sortie -
  • ;#####################################
  • MOV ah,4ch
  • MOV al,0
  • INT 21h
  • RET
  • quitter ENDP
  • END main
TITLE Editeur de Texte By Brait Loic

COMMENT @
Petit éditeur de texte permettant de lire/écrire un fichier

-Edition de texte d'acheve avec un compinaison de touche
-La touche return marche normalement
-Utilisateur est invite à entrée le nom du fichier
-Organisation du fichier est libre

Auteur: Brait Loic
Date de crétion: 22.05.05
Dernière modification: 22.05.05
Révison

@

.MODEL	small

.STACK	100h

.DATA
	nCarMaxMenu		DB	2
	nCarLuMenu		DB	?
	strLuMenu		DB	2 DUP(?)
	nCarMaxNom		DB	9
	nCarLuNom		DB	?
	strLuNom		DB	13 DUP(0)
	texte			DB	200 DUP(?),'$'
	handleFichier	DW	?
	handleFichierE	DW	?
	BufferTexte		DB	200 DUP(?),'$'
	
	
	;Message d erreur -------------------------------------
	FileSharingT	DB	'Pas de logiciel de File Sharing$'
	nonFichierT		DB	'Fichier non trouve$'
	cheminFauxT		DB	'Chemin non trouve$'
	plusHandleT		DB	'Plus de Handle libre$'
	accesRefuseT	DB	'Acces Refuse$'
	nonHandleT		DB	'Handle non autorise ou fichier correspondant non ouvert$'
	nonModeT		DB	'Mode d acces non autorise$'
	;-----------------
	
	;Texte du pogramme -------------------------------------
	textMenu		DB	'Voici un editeur de texte qui a etait code en Assembleur par Brait Loic',13d,10d,'Choisissez l opperation$'
	choixMenu		DB	'1. Nouveau Fichier',13,10,'2. Lire Fichier','$'
	mauvaisChoixT	DB	'LE CHOIX QUE VOUS AVEZ FAIT N EST PAS CORRECTE REFAITE LE !!!$'
	entreeNom		DB	'Veuillez entrez le nom du fichier (sans extension)$'
	entreeTexteT	DB	'Veuillez entrez le texte du fichier',13,10,'Pour Quitter Pressez la touche DOLLARD$'
	;----------------------
	
	
	;Mise en page------------
	extension	DB	'.txt$'
	etoile		DB	'*$'
	retourT		DB	13,10
	retour		DB	13,10,'$'
	blanc		DB	' $'
	;-------------------------
.CODE

main	PROC

MOV	ax,@data
MOV	ds,ax

;*************************************
;Debut du progrmamme =================
		;Nettoyage des registres
		SUB	AX,AX
		SUB	BX,BX
		SUB	CX,CX
		SUB	DX,DX
		SUB	SI,SI
		SUB	DI,DI	
	
	LEA	DX,textMenu
	CALL	afficheTexte	;Affiche le texte
	
	LEA DX,retour
	CALL	afficheTexte	;Affiche un espace
	
	mauvaischoix:
	
	LEA DX,choixMenu	
	CALL	afficheTexte	;Affiche le choix
	
	LEA DX,nCarMaxMenu
	CALL	demandeTexte	;Demande le choix
	
	MOV		AL,[strLuMenu]
	CALL	transASCII		;le choix transformer en nombre
	
	MOV	AH,1d
	CMP	AH,AL
	JZ	nouveau		;choix Nouveau Fichier
	
	MOV	AH,2d
	CMP	AH,AL
	JZ	lire	;choix lire et ecrire un fichier
	
	
		;Choix pas correcte -----------------------------
		LEA DX,retour
		CALL	afficheTexte	;Affiche un espace
		LEA	DX,mauvaisChoixT
		CALL	afficheTexte
		JMP	mauvaisChoix		;Mauvais Choix effectuer
	
	nouveau:	;---------------------------------------------------------
		LEA DX,entreeNom
		CALL	afficheTexte	;Affiche le texte de la demande su nom
				
		LEA DX,nCarMaxNom
		CALL	demandeTexte	;Demande le nom du fichier
	
		;Ajoute le .txt$ au nom
		CALL	ajouteExt
		
		;Cree le fichier
		LEA DX,strLuNom
		CALL	nouveauFichier
		
		MOV	handleFichier,AX
		
		JMP	ecrire				;pour ecrire dans le fichier
	
	lire: ;----------------------------------------------------------------
		;Affiche le texte de la demande de nom
		LEA DX,entreeNom
		CALL	afficheTexte
		
		;Demande le nom du fichier
		LEA DX,nCarMaxNom
		CALL	demandeTexte
		
		;Ajouter l extension
		CALL	ajouteExt
				
		;Ouvrir le fichier
		LEA DX,strLuNom
		MOV	CX,10100010b	;Mode d'acces (lecture/ecriture, lecture seul pour les autres prog, seul le prg actuel peut accéder)
		CALL	ouvrirFichier
		
		MOV	handleFichier,AX
		
		;Lire le fichier
		LEA	DX, BufferTexte
		MOV	BX,handleFichier
		MOV	CX,200				;taille du buffer
		CALL	lireFichier
		
		;Afficher le texte du fichier
		LEA DX,BufferTexte
		CALL	afficheTexte
		
		;Fermer le Fichier
		MOV	BX,handleFichier
		CALL	fermerFichier
		
		CALL	quitter			;Arreter le prg
		
	ecrire:	;----------------------------------------------------------
	
		;Afficher la Demander d'ecrire le texte
		LEA DX,entreeTexteT
		CALL	afficheTexte
	
		MOV	CX,200d
		SUB	DI,DI
		boucleTexte:
			;Demander le texte
			CALL	ecrireTexte
			MOV	[texte+DI],AL
					
			;Tester Si la touche est ENTER----------
			MOV	AH,0Dh
			CMP	AH,AL
			JZ	aLaLigne
			
			;Tester Si c'est la touchre BackSpace-------
			MOV	AH,8h
			CMP	AH,AL
			JZ	backSpace
			
			;Tester Si c'est pour quitter------------
			MOV	AH,24h
			CMP	AH,AL
			JZ	quitterLePrg
			
			JMP	normal
		
			aLaLigne:	;++++++++++++++++++++++++++++++
				;Ecrire dans le fichier
				LEA	DX,retourT
				MOV	BX,handleFichier
				SUB	CX,CX
				MOV	CL,2				;nombre de caractère a ecrire
				CALL	ecrireFichier
				
				;Afficher la lettre
					LEA DX,blanc
					CALL	afficheTexte
				
				JMP	continue
			
			backSpace:	;++++++++++++++++++++++++++++++
				;Ecrire dans le fichier
				
				JMP	continue
				
			quitterLePrg:	;+++++++++++++++++++++++++++
				;Fermer le Fichier
				MOV	BX,handleFichier
				CALL	fermerFichier
				
				;Quitter le Programme
				CALL	quitter
			
			normal:
			PUSH	CX
			;Ecrire normalement une lettre++++++++++++++
				;Ecrire dans le fichier
				LEA	DX,[texte+DI]
				MOV	BX,handleFichier
				SUB	CX,CX
				MOV	CL,1				;nombre de caractère a ecrire
				CALL	ecrireFichier
				
				;Afficher la lettre
					INC	DI
					MOV	[texte+DI],24h
					DEC	DI
					LEA DX,[texte+DI]
					CALL	afficheTexteEcrire
							
			continue:					
						
			POP	CX
			INC	DI	
			LOOP boucleTexte
						
		;Fermer le Fichier
		MOV	BX,handleFichier
		CALL	fermerFichier
;Fin du programme =======================
;****************************************

MOV	ah,4ch
MOV	al,0
INT	21h

main	ENDP
	;#####################################
	afficheTexte PROC USES AX
	;Affiche le texte envoyé
	;Entrée		DX : offset du texte à afficher
	;
	;Sortie		Texte à l'écran
	;#####################################
		MOV	AH,09h
		INT	21h
			
			;retour a la ligne------------------
				LEA	DX,retour		
				MOV	AH,09h
				INT	21h
		RET
	afficheTexte ENDP
	
	;#####################################
	afficheTexteEcrire PROC USES AX
	;Affiche le texte envoyé
	;Entrée		DX : offset du texte à afficher
	;
	;Sortie		Texte à l'écran
	;#####################################
		MOV	AH,09h
		INT	21h
		
		RET
	afficheTexteEcrire ENDP
	
	;#####################################
	demandeTexte PROC USES	AX
	;Demande le texte et le met dans un tableau
	;Entrée		DX : offset du Tableau (interuption)
	;
	;Sortie		Aucune
	;#####################################
		;entree la valeur ------------------------
		MOV	AH,0Ah		;fonction
		INT	21h			;interruption
			
			;retour a la ligne--------------------
				LEA	DX,retour		
				MOV	AH,09h
				INT	21h
				
		RET
	demandeTexte ENDP
	
	;#####################################
	ecrireTexte PROC
	;Pour ecrire du texte demande lettre par lettre
	;Entrée		-
	;
	;Sortie		AL : caractère ecrit
	;#####################################
		;entree la valeur ------------------------
		MOV	AH,07h		;fonction
		INT	21h			;interruption
							
		RET
	ecrireTexte ENDP
	
	;#####################################
	transASCII PROC 
	;Transforme un nombre ASCII en chiffre
	;Entrée		AL : nombre en ASCII
	;
	;Sortie		AL : nombre en chiffre
	;#####################################
		SUB	AL,48d
						
		RET
	transASCII ENDP
	
	;#####################################
	ajouteExt PROC 
	;Ajoute à la fin du nom du fichier l'extension avec le signe de fin
	;Entrée		strLuNom : nom du fichier
	;			nCarLuNom : nombre caractere entrée
	;
	;Sortie		-
	;#####################################
		SUB	AH,AH
		MOV	AL,nCarLuNom
		MOV	SI,AX
			;.txt$
			MOV	[strLuNom+SI],46d
			INC	SI
			MOV	[strLuNom+SI],116d
			INC	SI
			MOV	[strLuNom+SI],120d
			INC	SI
			MOV	[strLuNom+SI],116d
			INC	SI
			MOV	[strLuNom+SI],24h
						
		RET
	ajouteExt ENDP
	
	;#####################################
	nouveauFichier PROC 
	;Cree un nouveau fichier
	;Entrée		DS : @segment du nom du fichier
	;			DX : @offset du nom du fichier
	;
	;Sortie		-
	;#####################################
			MOV	AH,3Ch
			INT	21h
			
			;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
			JNC	pasLancerAffichageErreurNouveau
			CALL	typeErreur
			
			pasLancerAffichageErreurNouveau:
						
		RET
	nouveauFichier ENDP
	
	;#####################################
	ouvrirFichier PROC 
	;Ouvre un fichier
	;Entrée		DS : @segment du nom du fichier
	;			DX : @offset du nom du fichier
	;			AL : Mode d'accès
	;
	;Sortie		AX : OK(Handle) ou Code erreur
	;#####################################
			SUB	AX,AX
			MOV	AH,3Dh
			INT	21h
			
			;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
			JNC	pasLancerAffichageErreurOuvrir
			CALL	typeErreur
			
			pasLancerAffichageErreurOuvrir:
						
		RET
	ouvrirFichier ENDP
	
	;#####################################
	typeErreur PROC USES BX
	;Indique le Type d'erreur  (Optimisation faire relancer le prg)
	;Entrée		AX : Code de l erreur
	;			
	;Sortie		Affiche à l ecran le type d erreur
	;#####################################
			MOV	BX,1
			CMP	AX,BX
			JZ	FileSharing
			
			MOV	BX,2
			CMP	AX,BX
			JZ	nonFichier
			
			MOV	BX,3
			CMP	AX,BX
			JZ	cheminFaux
			
			MOV	BX,4
			CMP	AX,BX
			JZ	plusHandle
			
			MOV	BX,5
			CMP	AX,BX
			JZ	accesRefuse
			
			MOV	BX,6
			CMP	AX,BX
			JZ	nonHandle
			
			MOV	BX,12
			CMP	AX,BX
			JZ	nonMode
			
			;Erreur de manque de logiciel de File Sharing
			FileSharing:
				LEA	DX,FileSharingT
				CALL	afficheTexte
				CALL	quitter
							
			;Fichier non trouvé
			nonFichier:
				LEA	DX,nonFichierT
				CALL	afficheTexte
				CALL	quitter
							
			;Chemin non trouvé
			cheminFaux:
				LEA	DX,cheminFauxT
				CALL	afficheTexte
				CALL	quitter
							
			;Plus de Handle libre
			plusHandle:
				LEA	DX,plusHandleT
				CALL	afficheTexte
				CALL	quitter
							
			;Acces Refusé
			accesRefuse:
				LEA	DX,accesRefuseT
				CALL	afficheTexte
				CALL	quitter
								
			;Handle non  autorise ou fichier correspond non ouvert
			nonHandle:
				LEA	DX,nonHandleT
				CALL	afficheTexte
				CALL	quitter
							
			;Mode d acces non autorise
			nonMode:
				LEA	DX,nonModeT
				CALL	afficheTexte
				CALL	quitter
								
		RET
	typeErreur ENDP
	
	;#####################################
	lireFichier PROC USES BX CX
	;lire un fichier
	;Entrée		DS : @segment du buffer
	;			DX : @offset du buffer
	;			BX : Handle du fichier
	;			CX : Nombre d octel a lire
	;
	;Sortie		AX : nbr d octels lus ou Code erreur
	;#####################################
			SUB	AX,AX
			MOV	AH,3Fh
			INT	21h
			
			;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
			JNC	pasLancerAffichageErreurLire
			CALL	typeErreur
			
			pasLancerAffichageErreurLire:
						
		RET
	lireFichier ENDP
	
	;#####################################
	fermerFichier PROC 
	;ferme un fichier
	;Entrée		BX : Handle à fermer
	;
	;Sortie		AX : OK(Handle) ou Code erreur
	;#####################################
			SUB	AX,AX
			MOV	AH,3Eh
			INT	21h
			
			;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
			JNC	pasLancerAffichageErreurFermer
			CALL	typeErreur
			
			pasLancerAffichageErreurFermer:
						
		RET
	fermerFichier ENDP
	
	;#####################################
	ecrireFichier PROC USES BX CX
	;ecrire dans un fichier
	;Entrée		DS : @segment du buffer
	;			DX : @offset du buffer
	;			BX : Handle du fichier
	;			CX : Nombre d octel a ecrire
	;
	;Sortie		AX : nbr d octels lus ou Code erreur
	;#####################################
			SUB	AX,AX
			MOV	AH,40h
			INT	21h
			
			;Si le Carry est à 1 alors lancer la procedure qui va voire le type d'erreur
			JNC	pasLancerAffichageErreurLire
			CALL	typeErreur
			
			pasLancerAffichageErreurLire:
						
		RET
	ecrireFichier ENDP
	
	;#####################################
	quitter PROC 
	;quitter le prg
	;Entrée		-
	;
	;Sortie		-
	;#####################################
			MOV	ah,4ch
			MOV	al,0
			INT	21h
						
		RET
	quitter ENDP
	
END	main



 Sources de la même categorie

Source avec une capture LECTURE CHAINE ET COMPARAISON[MASM] par w4kfu
Source avec une capture LECTURE TOUCHE CLAVIER[MASM] par w4kfu
Source avec Zip UN RESOLVEUR SUDUKO AVEC ASSEMBLEUR NASM par msavyo1
Source avec Zip TESTEUR DE COMPATIBILITTÉ VESA (SUPER VGA) par bofur
Source avec Zip COMMUNICATION SÉRIE RS232 AVEC INTERRUPTIONS par bouffa

 Sources en rapport avec celle ci

ECRIRE EN COULEUR AVEC TASM par cheoles

Commentaires et avis

Commentaire de Nasman le 28/06/2005 14:12:21

Pour un premier programme assembleur, celui ci est relativement long (à moins que tu ne te sois taté du classique Hello World). Quelques remarques cependant pour optimiser ton programme - et pour une "standardisation de programmation":
Si les SUB AX,AX consistent à mettre le registre à zéro, utilise plutôt XOR AX,AX

Utilise le plus possible les registres 16 bits au lieu de deux fois des registre 8 bits, ainsi
MOV ah,4ch
MOV al,0
INT 21h
peut avantageusement être remplacé par
MOV ax,4c00h
INT 21h
1 octet d'économisé

Quand tu fais des comparaisons

MOV    BX,1           ;3 octets
CMP    AX,BX          ;2 octets
JZ    FileSharing     ;2 octets
          
MOV    BX,2           ;3 octets
CMP    AX,BX          ;2 octets
JZ    nonFichier      ;2 octets

je suppose que AX contient le code d'erreur à tester; il semble plutôt que ce qui t'interesse est dans AL (les valeurs de comparaison sont inférieures à FFh). Effectue plutôt des comparaisont entre AL et des valeurs immédiates 8 bits. Par exemple les lignes ci dessus deviennent:
CMP AL,1             ;2 octets
JZ  FileSharing      ;2 octets
CMP AL,2             ;2 octets
JZ  nonFichier       ;2 octets

Par test 4 octets seulement sont consommés (au lieu de 7)

Autre astuce, pour comparer un registre à zéro faire
AND registre,registre        positionne les flags avant un test

Bonne prog

Commentaire de izel le 28/06/2005 21:48:02

Oui c'est le premier "vrai" programme que je fais

Merci pour les conseils j'en prendrai compte par suite ^^

Commentaire de viran le 25/10/2005 14:48:29

Euh... pk ta tt mis en commentaire?

Commentaire de izel le 28/10/2005 08:54:07

Desolé je sais pas pourquoi mon code est mis en commentaire.
J ai essayé de le modifier mais il n'y a pas de commentaires ???

Commentaire de thierrysommer le 03/03/2006 11:25:29

Salut,
ce programme marche-t-il hors DOS, cad , à partir d'une disquette de boot par exemple, ou bien il faut dos ou win?

Commentaire de izel le 30/03/2006 12:55:17

Heu bonne question, je le lance à partir de l'invité de commandes. Mais sous une disquette ça devrai marcher

Commentaire de Nasman le 30/03/2006 13:33:55

Bonjour IZEL,

Ce programme nécessite d'avoir le dos pour fonctionner puisque les appels à l'interruption 21h lancent des fonction du dos. Si le dos n'est pas installé il y aura peut-être quelque chose de lancé avec int 21h (vecteur d'interruption en 0000:0084) mais ce peut-être n'importe quoi. Un plantage serait plus que probable.

Commentaire de izel le 29/05/2006 09:52:17

Je pensais à une disquette bootable fait avec windows

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

convertir un fichier ascci en fichier texte afin de pouvoir imprimer corectemen sur une imprimante laser [ par kamie ] KamieBonjour à tous,j'ai un petit problème et je ne sais pas comment faire.j'ai un fichier qui est de format ascii.lorsque nous imprimons ce fichier s Pas belle police de texte ! Ouinnn ! [ par Bombela ] Salut !Je fais de la prog Windows en C++ et Asm depuis peux et les progs que je fais, que ça soit en C++ ou Asm, on une police toute grasse et pas bel besoin d'aide pour de l'assembleur sous simulateur [ par critchou ] Bonjour, j'ai un programme à faire pour mercredi et je ne sais pas trop comment faire.Je dois écrire un texte (jusque là, ça va) et compter le nombre COULEUR DE TEXTE LORS DU PASSAGE DE LA SOURIS [ par knetus12 ] salut a tousj'ai un probleme pour faire changer la couleur d'un texte quand la souris passe dessus ca na marche pas pourquoi ??? .ELSEIF uMsg == algorithme huffman [ par yannenater ] salut,je voulais savoir si qqun pouvait m'aider pour trouver comment coder en ASM 68000 l'algo de huffman pour compresser un petit texte. le tout débu Affichage texte (Debutant) [ par ffomnislash ] BonjourJe debute en assembleur et je voudrais pouvoir afficher du texte en boucle, ceci j'y arrive sans pb mais le texte se rajouteAutrement dit j'ai texte défilant de gauche à droite [ par julemi ] Pouvez-vous m'envoyer le code source d'un programme qui fait défiler un texte de gauche à droite en language assembleur ...Merci comment transformer un éditeur en compilateur [ par rhumsek ] bonjour je possède un éditeur qui s'appel textpad, et je voudrais le configurer de façon à se qu'il puisse compilé des programme en assembleur, je pro macro avec parametre [ par mat74 ] salut a ts , voila j'essaie de créer une fonction , un macro en fait qui permetrait d'afficher le msg passer en parametre j'ai fait qqs essaies et sa Code HUFFMAN en asm 68000 [ par arnaud gasnier ] salut,je voulais savoir si qqun pouvait m'aider pour trouver comment coder en ASM 68000 l'algo de huffman pour compresser un petit texte. le tout d&#2


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales