No que diz respeito 0xCC
e 0xCD
, em particular, estes são relíquias do Intel 8088 / 8086 conjunto de instruções do processador de volta na década de 1980. 0xCC
é um caso especial do código de interrupção do software . A versão especial de byte único permite que um programa gere interrupção 3 .INT
0xCD
0xCC
Embora os números de interrupção de software sejam, em princípio, arbitrários, INT 3
era tradicionalmente usado para a função de quebra ou ponto de interrupção do depurador , uma convenção que permanece até hoje. Sempre que um depurador é iniciado, ele instala um manipulador de interrupção paraINT 3
que, quando esse código de operação for executado, o depurador seja acionado. Normalmente, ele pausará a programação em execução no momento e mostrará um prompt interativo.
Normalmente, o INT
código de operação x86 tem dois bytes: 0xCD
seguido pelo número de interrupção desejado de 0 a 255. Agora, embora você poderia emitir 0xCD 0x03
para INT 3
, a Intel decidiu adicionar um especial version-- 0xCC
sem byte adicional - porque um código de operação deve ser apenas um byte para funcionar como um 'byte de preenchimento' confiável para a memória não utilizada.
O objetivo aqui é permitir uma recuperação normal, se o processador saltar por engano na memória que não contém nenhuma instrução pretendida . As instruções de vários bytes não são adequadas para esse propósito, pois um salto incorreto pode ocorrer em qualquer deslocamento de bytes possível, onde teria que continuar com um fluxo de instruções formado adequadamente.
Obviamente, os opcodes de um byte funcionam trivialmente para isso, mas também pode haver exceções peculiares: por exemplo, considerando a sequência de preenchimento 0xCDCDCDCD
(também mencionada nesta página), podemos ver que é razoavelmente confiável, pois não importa onde o ponteiro da instrução esteja ( exceto, talvez, o último byte preenchido), a CPU pode continuar executando uma instrução x86 de dois bytes válida CD CD
, nesse caso, para gerar a interrupção 205 do software (0xCD).
Mais estranho ainda, embora CD CC CD CC
seja 100% interpretável - dando uma INT 3
ou outra INT 204
- a sequência CC CD CC CD
é menos confiável, apenas 75% como mostrado, mas geralmente 99,99% quando repetida como um preenchimento de memória de tamanho int.
Referência do Macro Assembler , 1987