Assembly 操作码ff/4将哪个值提供给eip

Assembly 操作码ff/4将哪个值提供给eip,assembly,x86,Assembly,X86,我试图模拟jmp(操作码ff/4)的操作。 当参考英特尔80386手册时,我发现: IF instruction = near indirect JMP (* i.e. operand is r/m16 or r/m32 *) THEN IF OperandSize = 16 THEN EIP <- [r/m16] AND 0000FFFFH; ELSE (* OperandSize = 32 *) EIP <- [r/m32]; FI;

我试图模拟
jmp(操作码ff/4)
的操作。 当参考英特尔80386手册时,我发现:

 IF instruction = near indirect JMP
 (* i.e. operand is r/m16 or r/m32 *)
 THEN
    IF OperandSize = 16
 THEN
     EIP <- [r/m16] AND 0000FFFFH;
 ELSE (* OperandSize = 32 *)
    EIP <- [r/m32];
    FI;
 FI;
我需要直接获取
%eax
的值,而不是访问地址0x1000063来获取0x00fcff10。 这和手册不冲突吗

如果r/m指的是地址,我该怎么办?
eip=M[r/M]
eip=M[M[r/M]

写得相当混乱

它实际做的是将
r/m
操作数的值写入
eip
。这是寄存器还是内存操作数的直接值取决于它是哪种类型的
r/m
操作数,这取决于编码它的类型(特别是在
mod
字段上)


因此,例如,
ffe0
将是
jmpeax
(不是来自内存)<代码>FF 20将是
jmp[eax]

写得相当混乱

它实际做的是将
r/m
操作数的值写入
eip
。这是寄存器还是内存操作数的直接值取决于它是哪种类型的
r/m
操作数,这取决于编码它的类型(特别是在
mod
字段上)


因此,例如,
ffe0
将是
jmpeax
(不是来自内存)<代码>FF 20将是
jmp[eax]

写得相当混乱

它实际做的是将
r/m
操作数的值写入
eip
。这是寄存器还是内存操作数的直接值取决于它是哪种类型的
r/m
操作数,这取决于编码它的类型(特别是在
mod
字段上)


因此,例如,
ffe0
将是
jmpeax
(不是来自内存)<代码>FF 20将是
jmp[eax]

写得相当混乱

它实际做的是将
r/m
操作数的值写入
eip
。这是寄存器还是内存操作数的直接值取决于它是哪种类型的
r/m
操作数,这取决于编码它的类型(特别是在
mod
字段上)

因此,例如,
ffe0
将是
jmpeax
(不是来自内存)
FF 20
将是
jmp[eax]

这来自“英特尔IA32体系结构软件开发人员手册第2卷”

JMP EAX的最终结果是FF E0

这来自“英特尔IA32体系结构软件开发人员手册第2卷”

JMP EAX的最终结果是FF E0

这来自“英特尔IA32体系结构软件开发人员手册第2卷”

JMP EAX的最终结果是FF E0

这来自“英特尔IA32体系结构软件开发人员手册第2卷”


JMP EAX的最终结果是FF E0

您的处理器手册必须非常旧,需要更新。您的处理器手册必须非常旧,需要更新。您的处理器手册必须非常旧,需要更新。您的处理器手册必须非常旧,需要更新。
   %eax=0x100063
   (%eax)=0x00fcff10(a wrong address)
IF near jump
  THEN IF near relative jump
    THEN
      tempEIP ← EIP + DEST; (* EIP is instruction following JMP instruction*)
    ELSE (* near absolute jump *)
      tempEIP ← DEST;           **<----- this is what you expect to happen**
  FI;
  IF tempEIP is beyond code segment limit THEN #GP(0); FI;
  IF OperandSize = 32
    THEN
      EIP ← tempEIP;            **<----- here it is assigned**
    ELSE (* OperandSize=16 *)
      EIP ← tempEIP AND 0000FFFFH;
  FI;
FI:
REG/OPCODE = 100b = 4
MOD = 11b = 3
R/M = 000b = 0
==> ModR/M Byte (in Hexadecimal) = E0h  (taken from Table 2-2. 32-Bit Addressing Forms with the ModR/M Byte)