Programme qui compare 3 nombre assembleur

Fermé
Syd - 27 oct. 2011 à 11:42
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 28 oct. 2011 à 07:20
Bonjour, j'ai fait un programme en assembleur qui compare trois nombres et dit qui est le plus grand mais il me met comme erreur A2022 : instruction operands must be the same size comment puis je le faire merci

TITLE comparaison 3 nombres
INCLUDE IUTInfo.inc
.data
msg BYTE "entrez 3 nombre",0
msg2 BYTE "les trois nombres sont égaux",0
msg3 BYTE "les deux premières valeurs sont égales et plus grande que v3",0
msg4 BYTE "v1=v2 et v1<v3",0
msg5 BYTE " v1=v3 et supérieur a v2",0
msg6 BYTE "v1 est le plus grand",0
msg7 BYTE "v3 est le plus grand",0
v1 WORD ?
v2 WORD ?
v3 WORD ?

.code
main PROC
mov edx,OFFSET msg
call WriteString
mov eax,v1
call readint
mov ebx,v2
call readint
mov ecx,v3
call readint
cmp eax,ebx ; compare les valeurs v1 et v2
je L1 ; saute vers L1 si elles sont égales
jg cas ;si v1>v2

L1:
cmp eax,ecx ; compare les deux autres valeurs à v3
je L2 ; saute vers L2 si elles sont égales
jg L3 ; saute vers L3 si les deux valeurs sont plus grandes que v3
jl L4 ; saute vers L4 si les deux valeurs sont plus petites que v3


L2:
mov edx, offset msg2
jmp fin

L3:
call writeint
mov edx,offset msg3
call writestring
jmp fin

L4:
mov eax,ecx
call writeint
mov edx,offset msg4
call writeint
jmp fin

cas:
mov eax,v1
cmp eax,ecx
je sousa
jg sousb
jl sousc

sousa:
mov edx,offset msg5
call writestring
jmp fin

sousb:
mov edx,offset msg6
call writestring

sousc:
mov edx,offset msg7
call writestring

fin:
exit
main ENDP
END main


A voir également:

4 réponses

nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 27/10/2011 à 13:12
Tu as déclarées les variables V1, V2 et V3 en 'word' et tu les lis en 32 bits, le problème est sûrement là...
Et tu ne détailles pas la fonction 'ReadInt', mais le chargement de EAX, EBX et ECX avant son appel me semble pour le moins bizarre !

Le chêne aussi était un gland, avant d'être un chêne
1
ca doit etre une erreur d'imcomprehension du cours alors donc je vais réessayer en declarant en DWORD et dappeller ReaInt avant de mettre les valeurs dans les régistres et je verrais
0
j'ai rééesayer mais je n'ai pas réussi tu pourrais me montrer en portion de code ce que tu me demande de cooriger stp?
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 28/10/2011 à 07:37
Voilà, j'ai repris ton code avec explications, mais je n'utilise pas le même assembleur que toi donc j'espère que ça fonctionne ainsi, et je manque de temps donc je donne ici une piste, plutôt qu'un résultat exact, et je finaliserais dès que possible...

TITLE comparaison 3 nombres
INCLUDE IUTInfo.inc
.data
msg BYTE "entrez 3 nombre",0
msg2 BYTE "les trois nombres sont égaux",0
msg3 BYTE "les deux premières valeurs sont égales et plus grande que v3",0
msg4 BYTE "v1=v2 et v1<v3",0
msg5 BYTE " v1=v3 et supérieur a v2",0
msg6 BYTE "v1 est le plus grand",0
msg7 BYTE "v3 est le plus grand",0
v1 DWord
v2 DWord
v3 DWord

.code
main PROC
mov edx,OFFSET msg
call WriteString
call readint
mov V1,eax
call readint
mov V2,eax
call readint
mov V3,eax

Mov eax,V1
cmp eax,V2 ; compare les valeurs v1 et v2
jg cas ;si v1>v2

L1: ;Continue ici si elles sont égales
cmp eax,V3 ; compare les deux autres valeurs à v3
jg L3 ; saute vers L3 si les deux valeurs sont plus grandes que v3
jl L4 ; saute vers L4 si les deux valeurs sont plus petites que v3

L2: ; Continue ici si elles sont égales
mov edx, offset msg2
Jmp @FinWS

L3:
Mov EBX,10
call writeint
mov edx,offset msg3
Jmp @FinWS

L4:
mov eax,V3
Mov EBX,10
call writeint
mov edx,offset msg4
Jmp @FinWS

cas:
mov edx,offset msg6
cmp eax,V2
jg @FinWS
mov edx,offset msg7
jl @FinWS
mov edx,offset msg5


@FinWS:
call writestring

fin:
exit
main ENDP
END main


Le chêne aussi était un gland, avant d'être un chêne
0