Opcode prefix can be duplicated. For example, let's take 8B opcode (mov) with operand size override prefix:
66 66 66 66 66 8B 00 visual studio disassembler's output (x64 mode):
mov ax, word ptr [rax] Now, let's take this one:
66 66 66 66 67 8B 00 visual studio disassembler's output:
mov ax, word ptr [eax] And this one:
66 66 66 67 /*it throws away left side*/ 67 8B 00 visual studio disassembler's output:
?? ?? ?? ?? mov eax, dword ptr [eax] So, I want to ask why prefix 67 can't be duplicated. Is it visual studio specific processing that does not match hardware semantics or cpu itself does not allow this?
ndisasmandobjdump, for example, decode that as expected.89 E5 mov %sp,%bpand turn it into a really long instruction:66 66 66 66 … 66 66 89 E5 mov %sp,%bp"