[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:

Instructions x86 | X

    	_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:

- Instructions des x86.

- Arithmétique.
  - Affichage.
  - Addition.
  - Soustraction.
  - Multiplication.
  - Division.

Daemonium Albus,
blaizard@caramail.com