Je me suis coincé dans l'interprétation du code suivant. Pour faire simple, je l'ai remplacé quelques chiffres lus à partir de segment de données avec des numéros directs:x86: Combinaison de conditions, de sauts et d'étiquettes
L1:
fld qword ptr [Data1]
fcomp 1.0
fnstsw ax
test ah, 01h
jz L2
fld qword ptr [Data2]
jmp L3
L2:
cmp word ptr [Data3], 0001h
jnz L4
fld qword ptr [Data4]
L3:
fstp qword ptr [esp+10h]
L4:
fld qword ptr [Data5]
fcomp 1.0
fnstsw ax
test ah, 01h
jz L5
mov qword ptr [Data6], 43.0
L5:
fld qword ptr [Data7]
fcomp 1.0
fnstsw ax
test ah, 01h
jz L6
mov qword ptr [Data7], 53.2
L6:
Ceci est mon interprétation de ce code:
double Data1
double Data2
int Data3
double Data4
double Data5
double Data6
double Data7
if Data1<=1.0 || Data3==1
if Data1<=1.0
*(esp+10h)= Data4;
else
*(esp+10h)= Data2;
end
end
if Data5<=1.0
Data6=43.0;
end
if Data7 <= 1.0
Data7=53.2;
end
J'ai deux préoccupations:
Mon code interprété est-il correct?
Dans l'intervalle compris entre
L1
àL4
il y a deux comparaisons, mais comment se fait dans mon code de haut niveau, j'ai 3 comparaisons et je ne peux pas le réduire à deux comparaisons? Le code d'origine a été dans un code de niveau haut/milieu. Je n'ai aucune information sur le langage de code original ou le compilateur.