Con respecto 0xCC
y 0xCD
, en particular, estos son reliquias de la Intel 8088 / 8086 volver conjunto de instrucciones del procesador en la década de 1980. 0xCC
es un caso especial del código de operación de interrupción de software . La versión especial de un solo byte permite que un programa genere interrupción 3 .INT
0xCD
0xCC
Aunque los números de interrupción de software son, en principio, arbitrarios, INT 3
se usaban tradicionalmente para la función de interrupción o punto de interrupción del depurador , una convención que se mantiene hasta nuestros días. Cada vez que se inicia un depurador, instala un controlador de interrupciones para que, cuando se ejecute ese código de operación, se active el depurador. Por lo general, pausará la programación actualmente en ejecución y mostrará un mensaje interactivo.INT 3
Normalmente, el INT
código de operación x86 tiene dos bytes: 0xCD
seguido del número de interrupción deseado de 0-255. Ahora si bien se puede emitir 0xCD 0x03
para INT 3
, Intel decidió añadir un especial version-- 0xCC
sin byte adicional - porque un código de operación debe ser solamente un byte con el fin de funcionar como un fiable 'relleno de bytes' para la memoria no utilizada.
El punto aquí es permitir una recuperación elegante si el procesador salta por error a la memoria que no contiene las instrucciones previstas . Las instrucciones de varios bytes no son adecuadas para este propósito, ya que un salto erróneo podría aterrizar en cualquier posible desplazamiento de bytes donde tendría que continuar con un flujo de instrucciones correctamente formado.
Obviamente, los códigos de operación de un byte funcionan trivialmente para esto, pero también puede haber excepciones extrañas: por ejemplo, considerando la secuencia de relleno 0xCDCDCDCD
(también mencionada en esta página), podemos ver que es bastante confiable ya que no importa dónde aterrice el puntero de instrucción ( excepto quizás el último byte llenado), la CPU puede reanudar la ejecución de una instrucción válida x86 de dos bytesCD CD
, en este caso para generar la interrupción de software 205 (0xCD).
Aún más extraño, mientras que CD CC CD CC
es 100% interpretable, dando cualquiera INT 3
o INT 204
- la secuencia CC CD CC CD
es menos confiable, solo el 75% como se muestra, pero generalmente el 99,99% cuando se repite como un relleno de memoria de tamaño int.
Referencia de ensamblador macro , 1987