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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| .MODEL small,stdcall
.STACK 4096
.386
.DATA
enonce db "Veuillez introduire un nombre ENTIER:",13,10,"$"
fauxCara db "Un caractere est invalide.",13,10
db "Si vous tentez d'introduire un reel dans EAX, veuillez passer par le code.$"
nombre db 100 dup (?)
taille dw 0
valeur dd 0
dixExpo dd 1
decalage dw 3
.CODE
main proc
mov ax,@data
mov ds,ax
mov es,ax
debut:
mov ah, 09h
mov dx, offset enonce
int 21h ;Enoncé
mov ah, 3Fh ;Saisi du nombre sous chaîne de caractères
mov bx, 0
mov cx, 100
mov dx, offset nombre
int 21h
mov taille, ax
iteration:
mov bx,offset nombre ;Déplacement de l'offset jusqu'au dernier caractère
add bx,taille
sub bx,decalage
mov eax,0
mov bl,[bx]
mov al,bl
cmp al,'-' ;Vérification négation
je verifNegation
sub bl,48 ;Conversion ASCII => VALEUR LITERALE
mov al,bl ;Vérification du caractère
cmp al,0
jb erreurCara
cmp al,9
ja erreurCara
jmp suite
verifNegation: ;Vérification de la négation
mov bx,decalage
cmp bx,taille
je conversionNegatif
erreurCara:
mov ah, 09h
mov dx, offset fauxCara
int 21h ;Affiche message d'erreur
jmp fin
suite: ;Constitution du nombre
mov ebx,eax
mov eax,dixExpo
mul ebx
add valeur,eax
mov eax,10 ;multiplie dixExpo par 10
mov ebx,dixExpo
mul ebx
mov dixExpo,eax
mov ax,decalage ;Boucle
cmp ax,taille
je afficher
inc decalage ;Pour reculer l'offset de 1 lors de l'itération
jmp iteration
conversionNegatif:
mov eax,-1 ;multiplie valeur par -1
mov ebx,valeur
mul ebx
mov valeur,eax
afficher:
mov cx,32 ;32 bits
;INSERER UNE CONSTANTE A LA DUR A LA PLACE DE VALEUR POUR TESTER UN REEL
affiche:
rcl valeur,1 ;bit de gauche de valeur dans CF
mov dl,0
adc dl,48
mov ah,02h
int 21h ;affiche le code ASCII
loop affiche
fin: ;Fin du programme
mov ah, 4Ch
mov al, 0
int 21h
main ENDP
END main |
Partager