ud0와 ud1이 미정의 opcode인데도 매개변수를 가질 수 있는 이유는, 아키텍처상 의미가 정해지지 않았다는 것과 명시적으로 ‘미정의 명령’이라고 선언됐다는 것이 다르기 때문이다. x86의 일부 opcode는 피연산자를 먼저 해석한 뒤에야 유효하지 않은 명령으로 판정됐다.

Pentium III 기준으로 0F F8부터 0F FF까지의 opcode 가운데 0F FB와 0F FF에는 처음에 의미가 할당되지 않았다. 주변 명령이 모두 mm 레지스터와 mm/m64 피연산자를 사용하므로, 디코더가 이 빈 opcode에도 같은 형식의 피연산자를 해석하도록 만들어졌을 수 있다. 이후 연산 단계에서 지원하지 않는 비트 조합을 만나면 잘못된 opcode 예외를 일으켰다.

이 동작은 빈 opcode에 SSE 명령을 배정할 때 문제가 됐다. PADDQ를 자연스러운 위치인 0F FF에 넣으려 해도, 이미 그 opcode가 예외를 일으킨다고 기대하는 프로그램이 있었다. 이를 유효한 명령으로 바꾸면 호환성이 깨질 수 있어 Intel은 PADDQ를 다소 어색한 위치인 0F D4에 배정했다.

미정의 명령이 매개변수를 받는 사례는 다른 아키텍처에도 있다. AArch64에는 영구적으로 미정의 상태로 예약된 명령 인코딩이 65,536개 있으며, udf 명령은 어떤 잘못된 opcode인지를 지정하는 16비트 즉시값을 받는다. PDP-10의 예약 opcode 000도 영구적으로 불법 명령이지만, 모든 PDP-10 명령과 마찬가지로 레지스터와 메모리 주소를 포함한다.

아키텍처 명세에는 없지만 일관된 동작이 역공학을 통해 알려져 프로그램에서 쓰이기 시작한 ‘비공식 opcode’도 있다. 6502가 이런 분석 사례로 잘 알려져 있다. 0F FF 역시 문서화되거나 공식 지원되지는 않았지만, 사용이 널리 퍼져 Intel이 하위 호환성을 고려해야 했던 비공식 opcode의 사례다.

글은 ud1이라는 니모닉이 NASM 어셈블러에서 도입된 것으로 보인다고 설명한다. NASM 변경 기록은 Intel이 사용하지 않을 것이라고 보장한 두 opcode 가운데 하나를 문서에서 UD2라고 부르고, 다른 하나는 ‘Undefined Opcode’라고만 표기했으며, 이를 UD1이라고 부르는 것이 타당해 보였다고 적었다. 글은 Intel 내부에서도 그 레거시 명령을 ud1이라고 불렀을 가능성을 제시한다.