mirror of
https://github.com/reactos/reactos.git
synced 2024-10-20 16:06:27 +00:00
[FAST486]
Fix the Mod-Reg-R/M parser. EBP cannot be used as a SIB byte base, instead it's used to mark that the base is an immediate operand. svn path=/branches/ntvdm/; revision=60944
This commit is contained in:
parent
0d174d717c
commit
1d21bb125f
|
@ -719,7 +719,21 @@ Fast486ParseModRegRm(PFAST486_STATE State,
|
||||||
Index = (SibByte >> 3) & 0x07;
|
Index = (SibByte >> 3) & 0x07;
|
||||||
if (Index != FAST486_REG_ESP) Index = State->GeneralRegs[Index].Long;
|
if (Index != FAST486_REG_ESP) Index = State->GeneralRegs[Index].Long;
|
||||||
else Index = 0;
|
else Index = 0;
|
||||||
Base = State->GeneralRegs[SibByte & 0x07].Long;
|
|
||||||
|
if ((SibByte & 0x07) != FAST486_REG_EBP)
|
||||||
|
{
|
||||||
|
/* Use the register a base */
|
||||||
|
Base = State->GeneralRegs[SibByte & 0x07].Long;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Fetch the base */
|
||||||
|
if (!Fast486FetchDword(State, &Base))
|
||||||
|
{
|
||||||
|
/* Exception occurred */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Calculate the address */
|
/* Calculate the address */
|
||||||
ModRegRm->MemoryAddress = Base + Index * Scale;
|
ModRegRm->MemoryAddress = Base + Index * Scale;
|
||||||
|
|
Loading…
Reference in a new issue