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 55 56
| .DATA
Buffer db 16 dup(0)
.CODE
Start:
; AX contient le nombre binaire à afficher
mov di, offset Buffer
call ConvertAscii
;------- Affichage de la valeur décimale ----
mov ah,9
mov dx, offset Buffer
INT 21h
;-------- Fin et Sortie ------
mov ax,4C00h
INT 21h
;================================================================================
; Conversion valeur binaire format Word en chaîne ASCII dans le Buffer
;--------------------------------------------------------------------------------
; A l'entrée : AX contient la valeur à convertir en décimal
; EDI pointe le buffer recevant les chiffres décimaux
ConvertAscii:
push ebx
push ecx
push edx
mov bx,10
xor cx,cx
;--- Divisions par 10 successives pour obtenir un résultat affichable
mov dx,ax
xor ax, ax ; AX = 0
mov ax,dx
BcleAscii:
xor dx,dx ; dx = 0 (car c'est la partie haute du dividende)
div bx ; division par 10 de DX:AX
push dx ; on stocke le reste en pile
inc cx ; on compte le nombre d'empilages
cmp ax,0 ; si le quotient est nul, on arrête
jne BcleAscii
;--- Restitution de la pile dans le buffer
BcleBuffer:
pop ax
add al,30h ; conversion en ASCII
stosb
loop BcleBuffer
mov al,'$' ; marqueur fin de chaine
stosb
pop dx
pop cx
pop bx
ret |
Partager