T
Das hängt ziemlich vom Befehl ab. Die einfachste Variante sind Befehle ophne parameter, ret z.B. Die werden meistens durch ein Byte codiert. Genauso werden manche Befehle furch zwei Byte codiert (dann ist das erste meistens 0F oder 0xD8-0xDF).
So bedeuten 1-2 Bytes alleine den Befehl. Dann müssen die Operanden ja meistens noch irgendwo landen. Gehts nur um eine normale Zahl, wird sie meistens einfach dahintergepackt (z.B. short jmp). Manche Bytes haben auch schon neben einem Befehl gleich einen Operanden mit als Bedeutung, z.B: bedeutet 0x04 add al, Ib, wobei Ib eine zahl ist die im nächsten Byte steht.
Die komplizierteste Form der Operandenkodierung ist das Mod/Rm-Byte. Dabei steht das Byte hinter dem Befehl je nach Codierung für ein Quell-/Zielregister und eine Speicherstelle/ein zweites Register. Wenns ganz hart kommt, ist auch anstatt des ersten Registers, der Opcode dadrin spezifiziert (beispielsweise deutet 0x80 nur die Parametertypen an, ob es nun add, adc, sub, sbb, and, or, xor oder cmp ist, sagt erst das Mod/Rm aus).
Rein theoretisch kann vor dem Opcode noch ein Haufen prefixes stehen, die z.B. zwischen 16 und 32-Bit Modus unterscheiden oder ein spezielles Segment angeben, alles in allem kann der extremste Opcode theoretisch 16 Bytes lang sein, aber ab 15 Bytes wirft der Prozessor eine #UD (Invalid Opcode exception).
Schau dir mal den zweiten Teil von Intels IA32-Doku an, dort steht das alles sehr ausführlich, zu finden unter http://developer.intel.com/design/pentium4/manuals/245471.htm