Por qué la instrucción indefinida de x86 se llama ud2 y no ud
Why is the x86 undefined instruction called ud2? Why 2?
La instrucción ud2 de x86 provoca una excepción de opcode inválido y los compiladores la usan para marcar código inalcanzable. Su nombre proviene de dos secuencias no oficiales: 0F FF y 0F B9, que Intel renombró retroactivamente como ud0 y ud1. ud2 quedó como la opción recomendada por ser una instrucción de dos bytes sin parámetros, garantizando un comportamiento consistente.
Con un número suficiente de usuarios, todos los comportamientos observables serán de los que alguien dependa.
- hacker_homie
Así que finalmente los creyentes en 0F FF fueron recompensados al recibir el honor de que el opcode UD0 los convirtiera en el único y verdadero opcode inválido original, deshonrando permanentemente a los seguidores de 0F B9 con la vergüenza de UD1.
- gtirloni
Recientemente tuve que depurar compilaciones que fallaban aleatoriamente y un ud2 de V8 estaba ahí esperándome.
- 349ru3h4f03
Hoy en día UD0, UD1 y UD2 están en el SDM y el APM.
También tenemos UDB (D6), la variante de un byte que llegó con x86-64 para el modo de 64 bits.
Y siempre hemos tenido UDW (FF FF), también conocido como grupo #5 (primer FF) con un byte modrm de mod=11b r/m=111b (/7) reg=111b (segundo FF) -- ese importa para memoria con todos los bits puestos a 1, o para buses terminados en todos 1 cuando ningún dispositivo reclama un acceso.
- Neywiny
No soy muy de x86, pero en otras arquitecturas puedes lanzar interrupciones/excepciones por software. ¿Acaso x86 no tiene esto o esas facilidades no cubrían suficientes casos de uso?
- ordu
> Se llama ud2 porque la variante 0F FF fue nombrada retroactivamente ud0, y la variante 0F B9 fue nombrada retroactivamente ud1, dejando ud2 como el opcode indefinido recomendado.
Fue una sorpresa para mí como lector. Cuando llegué a esta frase asumí que 0f ff se convertiría en #1 y 0fb9 -- #2. Pero no, Intel cuenta desde cero, así que hay un tercer ud.