|
|
facile! ( la c'est en assembleur intel )
asciicar db 'DSDdsdSDSdsD',0
asciicar2 db 'dSDdsddDSdsD',0
case_unsensitive:
mov edi,asciicar ;pointer sur les deux mots a comparer
mov esi,asciicar2
.nextcompare:
mov al,[edi] ;charger les deux lettres a comparer
mov ah,[esi]
inc esi ;incrementer les pointeurs
inc edi
or ah,ah ;fin du texte?
je .end
or al,al ;caractere ascii=0?
je .end ;alors fin, .end
cmp al,'A' ;plus petit que 'A'?
jb .err
cmp ah,'A'
jb .err ;alors erreur
cmp al,'z' ;plus grand que 'z'?
ja .err
cmp ah,'z'
ja .err ;alors erreur
or al,20h ;'A' or 20h = 'a'
or ah,20h ;'A' or 20h = 'a'
cmp al,ah ;comparer les deux lettres
je .nextcompare ;elles sont identiques, alors la suite
.err:
stc ;set carry flag, ça veu dire que c'est pas bon
ret
.end:
clc ;clear carry flag, ça veu dire que c'est bon
ret
bon, en gros, le 'A' = 41h ( 41 hexadecimal )
le 'a' = 61h
la difference des deux, c'est 20h; soit 010000 binaire
il suffit de forcer le bit n°5, bit de rang 5, valeur 20h, ou 32 decimal, pour positioner les lettres dans le meme case..
-->Message édité par edfed le 20/12/2007 06:52:01<--
|