Programme qui compare 3 nombre assembleur

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

4 réponses

  1. 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
    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
      1. 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
        1. 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