i read the Manual over and over, but still have not understood the 3.1.1.2 INSTRUCTION COLUMN,
1.
among much type of oprand (rel8, rel16, rel32, ptr16:16, ptr16:32, r8, r16, r32, imm8, imm16, imm32, r/m8, r/m16, r/m32,m,m8,m16,m32,m64,m128,m16:16,m16:32,m16&32,m16&16,m32&32,moffs8,moffs16,moffs32,sreg,m32fp,m64fp,
m80fp,m16int,m32int,m64int,st,st(0),st(i),mm,mm/m32,mm/m64,xmm,xmm/m32,xmm/m64,xmm/m128), Which is from modR/M byte(i dare guess r/m8,r/m16,r/m32, r8, r16, r32 do, and some r8 is from +rb)? and which is from ib(i dare guess imm8 do)....
rel8 is from modR/M or a byte following the opcode byte?
ptr16:16 is from modR/M or a word following the opcode word?
m,m8,m16,m128 is from modR/M or address immediate following the opcode word?
m16:16 is from modR/M or address immediate following the opcode doubleword?
m16&16 is from modR/M or address immediate following the opcode doubleword?
moffs8 is from modR/M or address immediate following the opcode doubleword?
....
2.
if modR/M byte is 10 000 100, that can been decoded as [-][-] + disp32, further,
if sib byte is 00 000 101, that can been decoded as [EAX] + disp32 + [EBP],
so the result is [EAX] + disp32 + [EBP] + disp32, that means 8 byte is following the sib byte, but the manual says maxiumn of displacement is 4 bytes. so what i decoded is not right. then how to decode this case.
for long time i cant understand these problem, please help me, THANKS.