Toutes les bases ne sont pas encore posées mais maintenant je connais la position de la première instruction (0x0200) aussi était-il temps de se jeter à l'eau et de commencer à décoder ma première instruction, armé de ma méga-référence.
0xBA
...
Inconnu dans la table de référence
...
C'est dans ces moments qu'il vous faut un câlin (ou une grande dose de persévérance) et un coup de pouce pour continuer à avancer. Et ce coup de pouce je l'ai trouvé en regardant plus en détail les sources de DCC. En effet l'une des premières choses que fait ce compilateur est de comparer la première séquence d'instructions afin de déterminer quel compilateur a (probablement) été utilisé. Je ne sais pas à quoi ça lui sert mais ça m'a permis de mieux cerner l'instruction dans son ensemble à savoir :
0xBA + 2octets => MOV DX, 2octets
Soit donc pousser une valeur entière dans le registre DX.
J'ai le problème et j'ai la solution mais je ne sais pas comment on arrive du problème à la solution... et il est évident que pour arriver à être plus autonome sur la décortication du code il faut que je comprenne.
Dans la table de référence, le OpCode (Operation Code, l'octet identifiant quelle opération accomplir) le plus approchant est B0+r ou B8+r et la première opérande est du type "r16" tandis que la seconde est "imm16".
Hum... câlin ?
J'ai plus tard su que cela avait un rapport avec ce que l'on appelle l'octet modR/M.
1 Commentaire