高级计算机体系结构设计及其在数据中心和云计算的应用x86 EncodingBasicx86Instruction:SIBPrefixesOpcodeMod R/MDisplacementImmediate0-4bytes0-bytes0-1bytes0/1/2/4bytes0/1/2/4bytes1-2bytesLongest Inst I5 bytesShortest Inst: I byteOpcode has flag indicating Mod R/M is present- Most instructions use the Mod R/M byte Mod R/M specifies if optional SIB byte is used Mod R/M and SIB may specify additional constantsInstructionlengthnotknownuntilafterdecode
高级计算机体系结构设计及其在数据中心和云计算的应用 x86 Encoding • Basic x86 Instruction: Prefixes 0-4 bytes Opcode 1-2 bytes Mod R/M 0-1 bytes SIB 0-1 bytes Displacement 0/1/2/4 bytes Immediate 0/1/2/4 bytes Longest Inst 15 bytes Shortest Inst: 1 byte • Opcode has flag indicating Mod R/M is present – Most instructions use the Mod R/M byte – Mod R/M specifies if optional SIB byte is used – Mod R/M and SIB may specify additional constants Instruction length not known until after decode
高级计算机体系结构设计及其在数据中心和云计算的应用x86 Mod R/M ByteModeR/MRegister1of8registersMode = OO: No-displacement, use Mem[Rmmm]Mode = 01: 8-bit displacement, Mem[Rmmm+disp)]Mode = 10: 32-bit displacement (similar to previous)Mode = 11: Register-to-Register, use RmmmT000100011001ADD EBX,ECXADD EBX, [ECX]Mod R/MMod R/M
高级计算机体系结构设计及其在数据中心和云计算的应用 x86 Mod R/M Byte • Mode = 00: No-displacement, use Mem[Rmmm] M M r r r m m m Mode Register R/M 1 of 8 registers • Mode = 01: 8-bit displacement, Mem[Rmmm+disp)] • Mode = 10: 32-bit displacement (similar to previous) • Mode = 11: Register-to-Register, use Rmmm ADD EBX, ECX 11 011 001 Mod R/M ADD EBX, [ECX] 00 011 001 Mod R/M