En ce qui concerne 0xCC
et 0xCD
en particulier, ce sont des vestiges de l' Intel 8088 / 8086 instruction de processeur ensemble dans les années 1980. 0xCC
est un cas particulier de l' opcode interruption logicielle . La version spéciale à un octet permet à un programme de générer une interruption 3 .INT
0xCD
0xCC
Bien que les nombres d'interruptions logicielles soient, en principe, arbitraires, INT 3
était traditionnellement utilisé pour la fonction d' interruption ou de point d'arrêt du débogueur , une convention qui reste à ce jour. Chaque fois qu'un débogueur est lancé, il installe un gestionnaire d'interruption pour INT 3
que lorsque cet opcode est exécuté, le débogueur soit déclenché. En général, il suspend la programmation en cours d'exécution et affiche une invite interactive.
Normalement, l' INT
opcode x86 est de deux octets: 0xCD
suivi du numéro d'interruption souhaité de 0 à 255. Maintenant, bien que vous puissiez émettre 0xCD 0x03
pour INT 3
, Intel a décidé d'ajouter une version spéciale - 0xCC
sans octet supplémentaire - car un opcode ne doit être qu'un octet pour fonctionner comme un `` octet de remplissage '' fiable pour la mémoire inutilisée.
Le point ici est de permettre une récupération gracieuse si le processeur saute par erreur dans la mémoire qui ne contient aucune instruction prévue . Les instructions multi-octets ne conviennent pas à cet objectif car un saut erroné pourrait atterrir à n'importe quel décalage d'octet possible où il devrait continuer avec un flux d'instructions correctement formé.
Évidemment, les opcodes à un octet fonctionnent trivialement pour cela, mais il peut aussi y avoir des exceptions bizarres: par exemple, compte tenu de la séquence de remplissage 0xCDCDCDCD
(également mentionnée sur cette page), nous pouvons voir qu'elle est assez fiable car peu importe où le pointeur d'instruction atterrit ( sauf peut - être le dernier octet rempli), la CPU peut reprendre l'exécution d'une instruction x86 valide à deux octetsCD CD
, dans ce cas pour générer l'interruption logicielle 205 (0xCD).
Plus étrange encore, alors qu'elle CD CC CD CC
est 100% interprétable - donnant soit INT 3
ou INT 204
- la séquence CC CD CC CD
est moins fiable, seulement 75% comme indiqué, mais généralement 99,99% lorsqu'elle est répétée comme un remplissage de mémoire de taille int.
Macro Assembler Reference , 1987