Peut on comparer deux binaire avec cmp ?

Signaler
Messages postés
2
Date d'inscription
dimanche 3 novembre 2002
Statut
Membre
Dernière intervention
12 août 2003
-
Messages postés
112
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
26 janvier 2011
-
Lo le forum me revoila ave cun new prob...

donc en fait g une table de variable, je prends al=0 je fait un xlat et je compare ce resultat avec une entrée qui est aussi en binaire (provenant d'un ppi) donc je boucle jusqu à ce que l entrée soit egale a un nombre de mon tableau alors pour comparer je fait un cmp al,dl en sachant que al,dl sont en binaires.. alors est possible ?

voici une partie d emon code source...

.386
.DATA

;Zone de définition des variables
ZERO	db	00000000b
UN	db	00000001b
DEUX	db	00000010b
TROIS	db	00000011b
QUATRE	db	00000100b
CINQ	db	00000101b
SIX	db	00000110b
SEPT	db	00000111b
MESS1	db	'CODE SWITCH :$'

.CODE
;ouverture du segment de code

DEBUT:	mov	ax,DGROUP
mov	ds,ax
ECRIO	CTRL,CONFIG

bo1:
ECRIO	PA,ZERO				;eteint tout les leds
LECPPI	PB				;le resultat se trouve dans al
mov	bl,al				;le resultat se trouve maintenant dans bl
mov	cx,8				;cx=8 = nbr de nbr contenu dans la table
xor	eax,eax				;al=0 pour demarer au debut de la table avec xlat

bo2:
xlat	ZERO				;al=table+al
   /!\	cmp	bl,al				;compare al à bl  /!\ EST CE POSSIBLE
je	ok				;si1 al=bl -> jump ok
inc	al				;sinon on incremente al
loop	bo2				;et on boucle jusqu à ce que al=bl

ok:						;cas ou al=bl
ECRIO	PA,al				;allume les leds correspondantes
AFFICH	MESS1				;affiche "CODE SWITCH :"
AFFICHNUM al				;affich le nombre a l'ecran
AFFICH	CRLF				;on passe a la ligne
mov	ah,06h				;lecture de caractère sans marquer d arret
mov	dl,ffh				;lecture car dl=ffh sinon sortie du caractère dont le code ascii est dans dl
int 	21h
cmp	al,'s'				;verifie si le caratère = 's'
jne 	bo1				;si caractère != 's' -> jmp bo1
ECRIO	PA,ZERO				;sinon etient les leds
mov	ax,4c00h			;et on quit le programme
int 	21h
end	Debut

3 réponses

Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

En fait ca ne pose aucun problème car le compilateur travaille dans une seule base. Les représentations binaire, décimal, octal, héxadécimal sont justes là pour aider le développeur.

Kaid - kaid.fr.st
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Si tu parler du format dans ton source:
12h equivaut à 18d qui équivaut aussi à 00010010b.

bref que tu fasses
cmp al, 41h
ou
cmp al, 00100001b
ou
cmp al, 65
ou encode
cmp al, 'A'

ça revient au même exactement au même car ce sont les même nombres.

Core Breaker :)
Messages postés
112
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
26 janvier 2011
1
bo2:
> xlat ZERO ;al=table+al
> /!\ cmp bl,al ;compare al à bl /!\ EST CE POSSIBLE
> je ok ;si1 al=bl -> jump ok
> inc al ;sinon on incremente al
> loop bo2 ;et on boucle jusqu à ce que al=bl

...c'est pas un peu con d'utiliser des xlat dans un tableau avec des valeur qui se suivent ?

si al=0 et xlat zero... al=0

si al=1 et xlat zero... al=1

.... je vois pas trop l'utilité de xlat dans ce cas lol

moi j'aurais plutot fait:

mov al,-1

bo2:

inc al

cmp bl,al

jne bo2


... le meme code sans Xlat avec plein de valeur dans le .data...

maintenant ca se peut que je me soit planté et que j'aie pas compris le but de ton code
moi, le seul, l'unique, ZinZin