begin process at 2010 02 09 22:23:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications ms-dos

 > AFFICHER UN REGISTRE A L'ECRAN [TASM]

AFFICHER UN REGISTRE A L'ECRAN [TASM]


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications ms-dos Niveau :Débutant Date de création :03/07/2002 Date de mise à jour :03/07/2002 13:33:11 Vu :3 311

Auteur : Ninkosen

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

 Description

Je cherchais le moyen d'afficher un registre... Je pensais qu'il existait une petite fonction du bios qui permettait de le faire, et pi en fait non ;-(
Donc on est obligé de faire soi même une fonction pour afficher un registre, par exemple AX...
En fait j'affiche d'abord AH, puis avec la même fonction j'affiche AL.
Les valeurs sont affichées en Hexadécimal.
Aucun registre n'est modifié par ma fonction.

Source

  • ;------------------------SEGMENT DE DONNEES-------------------------
  • ;-------------------------------------------------------------------
  • _data segment public
  • hex db '0123456789ABCDEF'
  • _data ends
  • ;------------------------SEGMENT DE CODE----------------------------
  • ;-------------------------------------------------------------------
  • _code segment public
  • assume cs:_code, ss:_stack
  • START:
  • mov ax, _data ;synchronise les segments data et ds
  • mov ds, ax
  • mov ax, 123Fh ;on choisit une valeur à afficher par exemple 123Fh
  • call AFFICHER_AX ;on appelle la procédure d'affichage de AX
  • mov ax, 4C00h ;fonction de fin du prog correcte
  • int 21h ;int 21h (retour au dos)
  • AFFICHER_AX:
  • push ax
  • xchg ah, al ;on échange ah et al
  • call AFFICHER_AL;de cette manière on affiche ah
  • xchg ah, al ;on rééchange ah et al
  • call AFFICHER_AL;pour afficher al
  • pop ax
  • ret
  • AFFICHER_AL:
  • push si bx ax ;(ax doit être tout en bas de la pile)
  • mov si, ax ;(dans le registre SegmentIndex on mets ax soit 12h)
  • shr si, 4 ;(on décale de 4bits pour ne garder que x1h)
  • and si, 0Fh ;on se débarrasse du 1er quartet il reste 01h
  • add si, Offset hex ;on additionne à 01h l'@ de la chaine on obtient l'@ de '1'
  • mov al, [ds:[si]] ;on récupère le '1' dans al
  • mov ah, 0Eh ;on prépare l'affichage avec la fonction OE du bios
  • int 10h ;on affiche
  • pop ax ;on restaure ax
  • push ax ;et on le rebalance dans la pile
  • mov si, ax ;on recommence avec ax
  • and si, 0Fh ;mais cette fois plus décalage(on s'occupe du 2e octet)
  • add si, Offset hex
  • mov al, [ds:[si]]
  • mov ah, 0Eh
  • int 10h
  • pop ax bx si ;on restaure les registres
  • ret
  • _code ends
  • ;--------------------------------------------------------------------
  • ;------------------------SEGMENT DE LA PILE--------------------------
  • ;--------------------------------------------------------------------
  • _stack segment stack
  • db 100h dup (?) ;déclare une pile de 256 octets
  • _stack ends
  • ;--------------------------------------------------------------------
  • ;------------------------SAUT AU DEBUT DU PROGRAMME------------------
  • end START
  • ;--------------------------------------------------------------------
;------------------------SEGMENT DE DONNEES-------------------------
;-------------------------------------------------------------------
_data segment public
	hex	db	'0123456789ABCDEF'
_data ends


;------------------------SEGMENT DE CODE----------------------------
;-------------------------------------------------------------------
_code segment public
	assume cs:_code, ss:_stack

	START:
		mov	ax, _data	;synchronise les segments data et ds
		mov	ds, ax
		
		mov	ax, 123Fh	;on choisit une valeur à afficher par exemple 123Fh
		call	AFFICHER_AX	;on appelle la procédure d'affichage de AX

		mov	ax, 4C00h	;fonction de fin du prog correcte
		int	21h		;int 21h (retour au dos)


	AFFICHER_AX:
		push	ax
			xchg	ah, al	   ;on échange ah et al
			call	AFFICHER_AL;de cette manière on affiche ah
			xchg	ah, al	   ;on rééchange ah et al
			call	AFFICHER_AL;pour afficher al
		pop	ax
		ret


	AFFICHER_AL:
		push	si bx ax		;(ax doit être tout en bas de la pile)
				mov	si, ax	;(dans le registre SegmentIndex on mets ax soit 12h)
				shr	si, 4	;(on décale de 4bits pour ne garder que x1h)
				and	si, 0Fh	;on se débarrasse du 1er quartet il reste 01h
				add	si, Offset hex ;on additionne à 01h l'@ de la chaine on obtient l'@ de '1'
				mov	al, [ds:[si]]	;on récupère le '1' dans al	
				mov	ah, 0Eh		;on prépare l'affichage avec la fonction OE du bios
				int	10h		;on affiche
			pop	ax		;on restaure ax
			push	ax		;et on le rebalance dans la pile
				mov	si, ax	;on recommence avec ax
				and	si, 0Fh	;mais cette fois plus décalage(on s'occupe du 2e octet)
				add	si, Offset hex
				mov	al, [ds:[si]]		
				mov	ah, 0Eh
				int	10h
		pop	ax bx si		;on restaure les registres
		ret

_code ends
;--------------------------------------------------------------------




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




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

 Conclusion

Possibilité d'améliorer le code, de le compléter en affichant les registres en décimal...
Si vous avez des commentaires, ou autres n'hésitez pas à poster...


 Sources du même auteur

Source avec Zip RESTAURER UN FICHIER IMAGE SUR UNE DISQUETTE [TASM]
Source avec Zip AFFICHER L'HEURE [TASM]
Source avec Zip CRÉER L' IMAGE D'UNE DISQUETTE [TASM]
HELLO WORLD (SANS L'INTERRUPTION DU DOS) [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 ThEcLeAn le 31/12/2002 15:39:24

Ton code, il est pas mal mais bon il y a vraiment plus court...
J'essaierrai d'en poster un exemple.

Commentaire de Ninkosen le 01/01/2003 01:06:38

C'est vrai qu'il doit surement exister plus court...
Ce sera avec plaisir que je jetterais un coup d'oeil à ta façon de procéder ;-)
à la prochaine

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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,608 sec (3)

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