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
|
org 100h
call prog_qui_a_besoin_de_tester_une_chaine
ret
prog_qui_a_besoin_de_tester_une_chaine:
mov [caractères_permis],lut_de_permission
mov [chaine_à_tester],chaine_ok
; mov [chaine_à_tester],chaine_erreur ;decommenter pour constater que ça detecte bien un caractère invalide
call tester_chaine
cmp al,0
jne .erreur_caractère_non_permis
.ok_caractères_permis:
ret ;si pas de caractère interdit, on sort du programme naturellement, sans avoir stack overflow
.erreur_caractère_non_permis:
call prog_qui_a_besoin_de_tester_une_chaine ;si caracère non permis, on fait un appel reccursif uqi entraine un stack overflow, ça marche!!!
ret
caractères_permis dw ?
chaine_à_tester dw ?
chaine_ok db '0123456789',0
chaine_erreur db '0123456789blablablabla1234thred',0
lut_de_permission: ;autoriser les caractères '()0123456789+-%*/$'
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 1,1,0,0, 1,1,1,1, 0,1,0,1 ; !"#$%&'()*+,-./
db 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,0 ;0123456789:;<=>?
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;@ABCDEFGHIJKLMNO
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;PQRSTUVWXYZ[\]^_
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;`abcdefghijklmno
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;pqrstuvwxyz{|}~.
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
tester_caractère:
mov bx,[caractères_permis]
xlat [bx]
ret
tester_chaine:
mov si,[chaine_à_tester]
.caractère:
lodsb
cmp al,0 ;tester si caractère zero, fin de chaine
je .fin
call tester_caractère
cmp al,0 ;si al = 0, caractère interdit
jne .caractère ;continuer sinon
inc al ;inventer un code pour dire qu'on à trouvé un caractère interdit
.fin: ;car sinon, al = 0 à cause du caractère de fin de chaine
ret ;et on quitte. |
Partager