La décompilation de Ravenloft : Strahd's possession

L'octet ModR/M (Mode Registre / Mémoire) permet de déterminer un couple de destination / sources. La destination est forcement un registre par contre la source peut être un registre, une adresse mémoire ou bien une combinaison des valeurs de registres et d'entiers signés donnant une adresse mémoire.

En premier lieu pour déterminer la source nous pouvons nous appuyer sur le tableau ci-après :

[caption]Table de destination du ModR/M[/caption]
registre 8bits (r8) AL CL DL BL AH CH DH BH
registre 16bits (r16) AX CX DX BX SP BP SI DI
registre segment ES CS SS DS FS GS res. res.
Valeur décimale 0 1 2 3 4 5 6 7
valeur binaire 000 001 010 011 100 101 110 111

Pour bien comprendre ce tableau il faut savoir que c'est la première colonne et les deux dernières lignes (qui sont la même valeur) qui sont les entêtes du tableau. Cette organisation particulière est voulue car en fait ce tableau servira d'entête de le tableau des destination/sources.

Chaque OpCode par sa nature vous indique si sa destination doit être un registre 8bits, 16bits ou bien un registre segment. La valeur provient de l'octet ModR/M qui peut se découper ainsi :

[caption]Regardez l'article en mode site pour bien voir les séparations[/caption]
  Destination  
8 7 6 5 4 3 2 1
Mod   R/M

De ce découpage que les 3 bits du milieu servent pour la destination alors que les 5 autres servent à déterminer la(es) source(s).

[caption]Table de destination / sources du ModR/M[/caption]
registre 8bits (r8) AL CL DL BL AH CH DH BH
registre 16bits (r16) AX CX DX BX SP BP SI DI
registre segment ES CS SS DS FS GS res. res.
Valeur décimale 0 1 2 3 4 5 6 7
valeur binaire 000 001 010 011 100 101 110 111
Source Mod R/M Valeur de l'octet ModR/M (en héxa)
[BX+SI] 00 000 00 08 10 18 20 28 30 38
[BX+DI] 001 01 09 11 19 21 29 31 39
[BP+SI] 010 02 0A 12 1A 22 2A 32 3A
[BP+DI] 011 03 0B 13 1B 23 2B 33 3B
[SI] 100 04 0C 14 1C 24 2C 34 3C
[DI] 101 05 0D 15 1D 25 2D 35 3D
[disp16] 110 06 0E 16 1E 26 2E 36 3E
[BX] 111 07 0F 17 1F 27 2F 37 3F
[BX+SI+disp8] 01 000 40 48 50 58 60 68 70 78
[BX+DI+disp8] 001 41 49 51 59 61 69 71 79
[BP+SI+disp8] 010 42 4A 52 5A 62 6A 72 7A
[BP+DI+disp8] 011 43 4B 53 5B 63 6B 73 7B
[SI+disp8] 100 44 4C 54 5C 64 6C 74 7C
[DI+disp8] 101 45 4D 55 5D 65 6D 75 7D
[BP+disp8] 110 46 4E 56 5E 66 6E 76 7E
[BX+disp8] 111 47 4F 57 5F 67 6F 77 7F
[BX+SI+disp16] 10 000 80 88 90 98 A0 A8 B0 B8
[BX+DI+disp16] 001 81 89 91 99 A1 A9 B1 B9
[BP+SI+disp16] 010 82 8A 92 9A A2 AA B2 BA
[BP+DI+disp16] 011 83 8B 93 9B A3 AB B3 BB
[SI+disp16] 100 84 8C 94 9C A4 AC B4 BC
[DI+disp16] 101 85 8D 95 9D A5 AD B5 BD
[BP+disp16] 110 86 8E 96 9E A6 AE B6 BE
[BX+disp16] 111 87 8F 97 9F A7 AF B7 BF
AL / AX 11 000 C0 C8 D0 D8 E0 E8 F0 F8
CL / CX 001 C1 C9 D1 D9 E1 E9 F1 F9
DL / DX 010 C2 CA D2 DA E2 EA F2 FA
BL / BX 011 C3 CB D3 DB E3 EB F3 FB
AH / SP 100 C4 CC D4 DC E4 EC F4 FC
CH / BP 101 C5 CD D5 DD E5 ED F5 FD
DH / SI 110 C6 CE D6 DE E6 EE F6 FE
BH / DI 111 C7 CF D7 DF E7 EF F7 FF

Les disp (displacement) sont des valeurs de 8 ou 16bits accompagnant l'instruction et se trouvant après l'octet ModR/M.

Pour les 8 dernières sources, je suppose que le choix s'effectue suivant la taille du registre de destination mais bon cela reste une supposition.

Laissez un commentaire

1 Commentaire

  • Je connaissais, mais en mode 32bits.

    • En effet, sachant que la table pour les architectures 32bits est quelque peu différente de celles des 16bis. De plus en 32bits on peut avoir recours à encore un autre octet, le SIB, pour faire des adressages plus complexes... heureusement que je me concentre que sur de la vieille technologie ouf

  • Faudra que tu m'expliques comment tu peux concilier IRL, mangas chelous et curiosité informatique plus que poussée. Tu es fou? Tu ne dors pas de la nuit?.. *choqué*

    • Assez mal en ce moment car le temps passé sur ce projet informatique empiète sur les animes de la semaine que j'ai à voir. D'ailleurs en quoi ces animes (et pas mangas evil ) sont chelous ? Quand à ma vie sociale... je n'ai pas de vie sociale (encore moins depuis que Ertaï est parti...) par contre je suis loin d'être insomniaque !

Laissez un commentaire

Vous devez être connecté pour commenter sur le Refuge. Identifiez-vous maintenant ou inscrivez-vous !


Marre des pubs ? Inscrivez-vous !