Recherche d’instructions 8086 non documentées via un microcode

Les joueurs vidéo connaissent les codes de triche, mais les programmeurs en langage d’assemblage sont souvent à la recherche d’instructions non documentées. Une façon de les trouver est de cartographier tous les opcodes d’un processeur et où il y a des trous, d’essayer ces valeurs et de voir ce qui se passe. Pas assez bon pour [Ken Shirriff]. Il préfère examiner le microcode du processeur et en déduire ce que fait chaque partie.

Le microcode est une caractéristique de nombreux processeurs modernes. Le CPU exécute plusieurs instructions de « microcode » pour traiter un seul opcode. Pour l’Intel 8086, il y a 512 micro-instructions, chacune avec 21 bits. Chaque instruction comporte deux parties : une partie qui déplace une source vers une destination et une autre qui effectue une autre opération, telle qu’une opération ALU. [Ken] explique tout cela dans le message, y compris plusieurs registres cachés que vous ne pouvez pas voir, mais le microcode le peut.

Recherche de trous dans la table des opcodes.

Certaines des instructions non documentées ne sont probablement pas utiles. Ils sont soit peu pratiques, soit dupliquent une fonction que vous pouvez déjà effectuer d’une autre manière. Toutes les instructions ne sont pas là pour des raisons techniques. Par exemple, l’opcode D6, communément appelé SALC pour « Set AL to Carry », semble n’exister que comme un piège pour quiconque faisant une copie conforme du microcode d’Intel. Lorsque d’autres sociétés comme NEC fabriquaient des clones 8086, le fait d’avoir une instruction non documentée suggérerait fortement qu’elles se contentaient de copier la propriété intellectuelle d’Intel (dans le cas de NEC, elles ne l’ont pas fait).

D’autres cas se produisent où une instruction n’a tout simplement pas de sens. Par exemple, vous pouvez faire éclater tous les registres de segment, et bien que cela ne soit pas documenté, vous pouvez en déduire que POP CS doit être l’opcode 0F. Le problème est qu’il n’y a aucune raison raisonnable de retirer CS de la pile. L’instruction fonctionne; ce n’est tout simplement pas utile. Les opcodes de 60-6F sont des sauts conditionnels qui ne sont pas différents des instructions de 70-7F à cause du décodage. Il n’y a aucune raison de documenter les deux gammes d’instructions identiques.

L’intrigue s’épaissit lorsque vous passez à des instructions à deux octets. Vous trouverez de nombreuses instructions de valeur douteuse. Vous n’entendez plus beaucoup parler d’instructions non documentées. Pourquoi? Parce que les processeurs modernes ont suffisamment de circuits pour en dédier certains à la détection d’instructions illégales et à l’arrêt du processeur. Mais le 8086 était trop serré pour permettre un tel luxe. Bonne chose pour les gens comme nous qui aiment résoudre des énigmes.

Vous pouvez toujours obtenir un processeur moderne pour vous en dire plus sur les instructions, même s’il ne les exécute pas. Même le 80286 avait des opcodes secrets.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.