Hello world (sans l'interruption du dos) [tasm]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 707 fois - Téléchargée 27 fois

Contenu du snippet

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 / Exemple :


;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 ;-) @+

A voir également

Ajouter un commentaire

Commentaires

cs_GuruMeditation
Messages postés
69
Date d'inscription
samedi 28 octobre 2000
Statut
Membre
Dernière intervention
15 octobre 2004
-
Et si tu introduisait les caratères directement dans les adresses B8000h
Ninkosen
Messages postés
17
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
13 juillet 2003
-
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 ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.