;Affiche à l'écran une chaîne de caractères
affiche_chaine:
	push ax
	push bx
	push cx
	push dx
	xor bh, bh; RAZ de bh, qui stocke la page d'affichage
	mov ah, 0x03
	int 0x10; appel de l'interruption BIOS qui donne la position du curseur, stockée dans dx
	mov cx, 1; nombre de fois où l'on va afficher un caractère
affiche_suivant:
	lodsb
	or al, al;on compare al à zéro pour s'arrêter
	jz fin_affiche_suivant
	cmp al, 13
	je nouvelle_ligne
	mov ah, 0x0A;on affiche le caractère courant cx fois
	int 0x10
	inc dl; on passe à la colonne suivante pour la position du curseur
	cmp dl, 80
	jne positionne_curseur
nouvelle_ligne:
	inc dh; on passe à la ligne suivante
	xor dl, dl; colonne 0
	cmp dh, 25
	jb positionne_curseur
	xor dh, dh
	mov ah, 0x02;on positionne le curseur
	int 0x10
	mov cx, 25*80
	mov ah, 0x0A;on affiche le caractère courant cx fois
	mov al, ' '
	int 0x10
	mov cx, 1
positionne_curseur:
	mov ah, 0x02;on positionne le curseur
	int 0x10
	jmp affiche_suivant
fin_affiche_suivant:
	pop dx
	pop cx
	pop bx
	pop ax
	ret

;écrit dans la chaîne pointée par DI le nombre contenu dans AX
;si CL est à un, on écrit un caractère terminal
;CH contient le nombre minimal de caractères à utiliser
;BL contient la base
nombre_vers_chaine:
	push bx
	push dx
	push cx
	xor bh, bh
	mov cl, 1
stocke_digit:
	xor dx, dx
	div bx
	push dx ;sauve le reste dans la pile
	inc cl
	or ax, ax
	jne stocke_digit
;Les digits sont stockés dans la pile
	inc bh ;
ajout_zero:
	cmp ch, cl
	jb clearCH
	push ' '-'A'+10
	inc cl
	jmp ajout_zero
clearCH:
	xor ch, ch
;Affichage du chiffre
boucle_digit:
	dec bh
	loop affiche_digit
	pop cx ; on récupère le paramètre bx
	test cl, 0b1 ; s'il est à 1, on écrit un caractère terminal
	jz depile
	mov byte [di], 0
depile:
	pop dx
	pop bx
ret

affiche_digit:
	pop ax
	cmp ax, 10
	jae dixPlus
	add ax, '0'
	stosb ; met AL dans l'octet pointé par DI et incrémente DI
	jmp boucle_digit
dixPlus:
	add ax, 'A' - 10
	stosb
	jmp boucle_digit
;fin nombre_vers_chaine
