begin process at 2010 03 16 20:55:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications ms-dos

 > HELLO WORLD (SANS L'INTERRUPTION DU DOS) [TASM]

HELLO WORLD (SANS L'INTERRUPTION DU DOS) [TASM]


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications ms-dos Niveau :Débutant Date de création :01/07/2002 Date de mise à jour :01/07/2002 00:09:31 Vu :4 412

Auteur : Ninkosen

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

 Description

On connaissait déjà la manière d'afficher le "Hello World" grâce à la fonction 09h du dos mais comment afficher une chaine de caractères avec l'interruption bios sans avoir à afficher chaque lettre une à une, c'est bien sûr possible, voici comment je procède :

Source

  • ;CODE ASM COMPILE SOUS TASM 4.1
  • ;------------------------SEGMENT DE DONNEES-------------------------
  • ;-------------------------------------------------------------------
  • data segment public
  • Hello db 'Hello world (version bios)',10,13,'$'
  • data ends
  • ;------------------------SEGMENT DE CODE----------------------------
  • ;-------------------------------------------------------------------
  • code segment public
  • assume cs:code, ds:data, ss:stack_s
  • start:
  • mov ax, data ;synchronise le segment de donnée data avec ds
  • mov ds, ax
  • mov dx, Offset Hello
  • call afficher_chaine
  • mov ax, 4C00h ;mets la fonction de sortie du programme(4C)+aucune erreur(00)
  • int 21h ;sortie
  • afficher_chaine:
  • push ax ;on sauvegarde ax et si dans la pile
  • push si
  • mov si, dx ;on met l'@ du premier caractère de la chaine dans si
  • boucle:
  • mov ax, [si] ;on récupère le caractère courant
  • cmp ax, '$' ;s'il sagit de $
  • je finboucle ;alors on arrête
  • mov ah, 0Eh ;on mets la fonction affichage dans A (le caractère est déjà dans la partie basse)
  • int 10h ;interruption bios pour afficher le caractère
  • inc si ;on passe au caractère suivant
  • jmp boucle ;on boucle
  • finboucle:
  • pop si ;on restaure les registres
  • pop ax
  • ret
  • code ends
  • ;--------------------------------------------------------------------
  • ;------------------------SEGMENT DE LA PILE--------------------------
  • ;--------------------------------------------------------------------
  • stack_s segment stack
  • db 100h dup (?) ;déclare une pile de 256 octets
  • stack_s ends
  • ;--------------------------------------------------------------------
  • ;------------------------SAUT AU DEBUT DU PROGRAMME------------------
  • end start
  • ;--------------------------------------------------------------------
;CODE ASM COMPILE SOUS TASM 4.1

;------------------------SEGMENT DE DONNEES-------------------------
;-------------------------------------------------------------------
data segment public
	Hello db 'Hello world (version bios)',10,13,'$'
data ends


;------------------------SEGMENT DE CODE----------------------------
;-------------------------------------------------------------------
code segment public
	assume cs:code, ds:data, ss:stack_s

	start:
		mov	ax, data		;synchronise le segment de donnée data avec ds
		mov	ds, ax

		mov	dx, Offset Hello
		call	afficher_chaine

		mov	ax, 4C00h		;mets la fonction de sortie du programme(4C)+aucune erreur(00)
		int	21h			;sortie


	afficher_chaine:
		push	ax			;on sauvegarde ax et si dans la pile
		push	si
		mov	si, dx			;on met l'@ du premier caractère de la chaine dans si
	boucle:
		mov	ax, [si]		;on récupère le caractère courant
		cmp	ax, '$'			;s'il sagit de $
		je	finboucle		;alors on arrête

		mov	ah, 0Eh			;on mets la fonction affichage dans A (le caractère est déjà dans la partie basse)
		int	10h			;interruption bios pour afficher le caractère

		inc	si			;on passe au caractère suivant
		jmp	boucle			;on boucle
	finboucle:
		pop	si			;on restaure les registres
		pop	ax
		ret
code ends
;--------------------------------------------------------------------




;------------------------SEGMENT DE LA PILE--------------------------
;--------------------------------------------------------------------
stack_s segment stack
	db 100h dup (?)			;déclare une pile de 256 octets
stack_s ends
;--------------------------------------------------------------------




;------------------------SAUT AU DEBUT DU PROGRAMME------------------
	end start
;--------------------------------------------------------------------

 Conclusion

bon si vous avez des questions ninkosen@yahoo.fr ou bien des améliorations à apporter au code n'hésitez pas ;-) @+


 Sources du même auteur

Source avec Zip RESTAURER UN FICHIER IMAGE SUR UNE DISQUETTE [TASM]
Source avec Zip AFFICHER L'HEURE [TASM]
AFFICHER UN REGISTRE A L'ECRAN [TASM]
Source avec Zip CRÉER L' IMAGE D'UNE DISQUETTE [TASM]

 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

Commentaires et avis

Commentaire de GuruMeditation le 01/08/2002 20:21:13

Et si tu introduisait les caratères directement dans les adresses B8000h

Commentaire de Ninkosen le 02/08/2002 22:24:33

Tu veux dire mettre tous les caractères d'un seul coup en mémoire sans les y mettre un a un ?
c'est une possibilité c vrai que ce serait sans doute un peu plus rapide( avec un rep movsb) mais je n'ai pas réfléchi si c vraiment faisable, il faudrait ne pas oublier que les caractères sont placés en mémoire de deux en deux, car il y a la couleur entre chaque caractère...
Interressant comme idée je vais essayer
C'était juste une idée ou tu est arrivé à le faire ?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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,406 sec (4)

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