1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; nombreVersChaine ;;
;;------------------------------------------------------------------;;
;; Ecrit dans la chaîne pointée par EDI le nombre contenu dans EAX ;;
;; si CL est à un, on écrit un caractère terminal ;;
;; CH contient le nombre minimal de caractères à utiliser ;;
;; EBX contient la base ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
nombreVersChaine:
push edx
push ecx
xor cl, cl
.stocke_digit:
xor edx, edx
div ebx
push edx ; Sauve le reste dans la pile
inc cl
or eax, eax ; Si le quotient n'est pas nul
jne .stocke_digit ; on recommence
;Les digits sont stockés dans la pile
.ajout_zero:
cmp ch, cl
jbe .clearCH
push ' '-'A'+10 ; Nombre magique permettant de remplir avec des espaces
inc cl
jmp .ajout_zero
.clearCH:
xor ch, ch
;Affichage du chiffre : On en affiche au moins un : zéro
.affiche_digit:
pop eax
cmp al, 10
jae .dixPlus
add al, '0'
stosb ; met AL dans l'octet pointé par EDI et incrémente EDI
jmp .boucle_digit
.dixPlus: ; Pour les bases à plus de 10 chiffres, on utilise l'alphabet
add al, 'A' - 10
stosb
jmp .boucle_digit
.boucle_digit:
loop .affiche_digit
pop ecx ; on récupère le paramètre cx
test cl, 0b1 ; s'il est à 1, on écrit un caractère terminal
jz .depile
mov byte [edi], 0
.depile:
pop edx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Fin nombreVersChaine ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Partager