Per quanto riguarda 0xCC
e 0xCD
in particolare, questi sono reperti del Intel 8088 / 8086 set di istruzioni del processore di nuovo nel 1980. 0xCC
è un caso speciale del codice operativo di interruzione del software . La speciale versione a byte singolo consente a un programma di generare interrupt 3 .INT
0xCD
0xCC
Sebbene i numeri di interruzione del software siano, in linea di principio, arbitrari, INT 3
veniva tradizionalmente utilizzato per la funzione break o breakpoint del debugger , una convenzione che rimane fino ai giorni nostri. Ogni volta che viene avviato un debugger, viene installato un gestore di interruzioni in modo INT 3
tale che quando viene eseguito quel codice operativo verrà attivato il debugger. In genere mette in pausa la programmazione in esecuzione e mostra un prompt interattivo.
Normalmente, il INT
codice operativo x86 è di due byte: 0xCD
seguito dal numero di interruzione desiderato compreso tra 0 e 255. Ora anche se si potrebbe emettere 0xCD 0x03
per INT 3
, Intel ha deciso di aggiungere una speciale version-- 0xCC
senza ulteriore byte - perché un codice operativo deve essere un solo byte in modo da funzionare come un affidabile 'di riempimento byte' per la memoria inutilizzata.
Il punto qui è consentire un recupero corretto se il processore salta erroneamente nella memoria che non contiene alcuna istruzione prevista . Le istruzioni multi-byte non sono adatte a questo scopo poiché un salto errato potrebbe atterrare a qualsiasi possibile offset di byte in cui dovrebbe continuare con un flusso di istruzioni correttamente formato.
Ovviamente, i codici operativi a un byte funzionano in modo banale per questo, ma ci possono anche essere eccezioni bizzarre: ad esempio, considerando la sequenza di riempimento 0xCDCDCDCD
(menzionata anche in questa pagina), possiamo vedere che è abbastanza affidabile poiché non importa dove il puntatore dell'istruzione atterra ( eccetto forse l'ultimo byte riempito), la CPU può riprendere l'esecuzione di un'istruzione x86 a due byte valida CD CD
, in questo caso per la generazione dell'interrupt software 205 (0xCD).
Ancora più strano, mentre CD CC CD CC
è interpretabile al 100% - dando una INT 3
o INT 204
- la sequenza CC CD CC CD
è meno affidabile, solo il 75% come mostrato, ma generalmente il 99,99% quando ripetuto come riempitivo di memoria di dimensioni int.
Macro Assembler Reference , 1987