[Arithmétique] - [Affichage] - [Addition] - [Soustraction] - [Multiplication] - [Division]

.:: Rubrique Arithmétique >> Affichage ::.

Maintenant qu'on a nos nombres encore faut-il pouvoir les afficher à l'écran. On va définir un nombre quelconque qui sera enregistré à l'offset _NOMBRE, on va lui affecter comme valeur hexadécimale 0x1234567890.

les nombres se notent octets par octets (à cause de l'instruction db) et à l'envers pour faciliter les calculs.

Ce qui nous donne en assembleur:

	_NOMBRE1:
		db 0x05;				;Longueur du nombre en octet (LONG)
		db 0x90, 0x78, 0x56, 0x34, 0x12 	;Le nombre (DATA)

 Maintenant qu'on a créé notre nombre, il reste à faire le plus dur... (hé, hé, hé... ), l'agorithme d'affichage des nombres en héxadécimal. Pourquoi en hexa? et bien parceque c'est beaucoup plus simple! les données sont enregistrées dans la mémoire sous forme de bit (1 ou 0) donc les bases puissances de 2 sont beaucoup plus simples à manipuler que notre base classique, la base 10 (décimale). Voilà. Bon assez discuté, au boulot !!!

	_AFFICHAGE:
	
		push ax
		shr  al,  4
		add  al,  30h
		cmp  al,  39h
		jbe  _SUITE1 	;saute si le chiffre est inférieur a 10
		add  al,  07h
	
	_SUITE1:
	
		mov  ah,  0Eh
		int  10h 	;appelle l'interruption du BIOS pour afficher un caractère
		pop  ax
		and  al,  0Fh
		add  al,  30h
		cmp  al,  39h
		jbe  _SUITE2 	;saute si le chiffre est inférieur a 10
		add  al,  07h
	
	_SUITE2:
	
		mov  ah,  0Eh
		int  10h 	;appelle l'interruption du BIOS pour afficher un caractère
	
		ret
	

Cette routine permet d'afficher un octet sous forme de données hexadecimale à l'écran en utilisant les interuptions du BIOS donc pas de dépendance avec le DOS. Bon bref c'est bien joli tout ça mais encore faut-il pouvoir afficher plus qu'un octet à l'écran. Et bien il suffit d'appeler (LONG) fois cette procedure et le tour est joué!

	_AFFNB:
	
		xor  cx,  cx
		mov  cl,  [ds:si]	;récupère la longueur (LONG) du nombre
	
	_BOUCLE_AFFNB:
	
		mov  bx,  si
		add  bx,  cx
		mov  ax,  [ds:bx]
		call _AFFICHAGE		;appelle la routine précédente
		dec  cx
		test cx,  cx
		jne  _BOUCLE_AFFNB
	
		ret
	

 Et voilà! pour l'appeler il suffit donc de mettre l'offset de départ de notre nombre dans "si" et faire un "call _AFFNB" et c'est gagné !!!!!!!!!!!!! Avec Mr. Albus, vous êtes un winneur !!!!!!!!


Voici les différentes rubriques:


Daemonium Albus,
blaizard@caramail.com