Programme qui compare 3 nombre assembleur
Syd
-
nicocorico Messages postés 846 Statut Membre -
nicocorico Messages postés 846 Statut Membre -
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
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:
- Algorithme maximum de 3 nombres
- Ai suite 3 - Télécharger - Optimisation
- Picasa 3 - Télécharger - Albums photo
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- Nombre de jours entre deux dates excel - Guide
- Nombre maximum de destinataires dans un mail gmail - Forum Mail
4 réponses
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
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
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
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?
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
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