I have two different versions of "IA-32 Intel Architecture Software Developer's Manual". In Table A-2 "One-byte Opcode Map", one says 0x82 is "Ev, Ib"(the same as 0x83)but the other says 0x82 is "Eb, Ib"(the same as 0x80). But in "instruction set reference", it seems 0x82 is never used(for example, instruction __add__). So, is 0x82 a valid opcode? If it is, how should I decode it?
Here is the response we received from our hardware engineering contacts:
0x82 is a valid instruction. It decodes to ADD, SUB, AND, OR, XOR depending on the MODRM. If MOD is 11 then we have memory operations. Group 1 (row 1) in table A-4 (appdx A) defines how the instruction is decoded from that point onwards. The ADD entry of table B-10 shows the decode for opcode 0x82.
Is there any difference between opcode 0x82 and 0x83? From the "one-byte opcode map (table A-2)", it seems they're identicle.
They're not, they're function might be but 82H uses a byte to encode operand data whilst 83H is dependant on the operand size attribute. Adn plus 82H isn't encodable in 64-bit mode, may that's why theres two.