mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
[FAST486]
- When accessing memory using ESP, make the SS segment default. - The INT instructions always pushes 16-bit values in real mode, regardless of the operand/address size attributes. svn path=/branches/ntvdm/; revision=61000
This commit is contained in:
parent
f5d0d3e784
commit
4b005f11bf
2 changed files with 19 additions and 0 deletions
|
@ -240,6 +240,14 @@ Fast486InterruptInternal(PFAST486_STATE State,
|
||||||
if (!Fast486StackPush(State, OldEsp)) return FALSE;
|
if (!Fast486StackPush(State, OldEsp)) return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (State->SegmentRegs[FAST486_REG_CS].Size)
|
||||||
|
{
|
||||||
|
/* Set OPSIZE, because INT always pushes 16-bit values in real mode */
|
||||||
|
State->PrefixFlags |= FAST486_PREFIX_OPSIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Push EFLAGS */
|
/* Push EFLAGS */
|
||||||
if (!Fast486StackPush(State, State->Flags.Long)) return FALSE;
|
if (!Fast486StackPush(State, State->Flags.Long)) return FALSE;
|
||||||
|
|
|
@ -730,6 +730,17 @@ Fast486ParseModRegRm(PFAST486_STATE State,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((SibByte & 0x07) == FAST486_REG_ESP)
|
||||||
|
{
|
||||||
|
/* Check if there is no segment override */
|
||||||
|
if (!(State->PrefixFlags & FAST486_PREFIX_SEG))
|
||||||
|
{
|
||||||
|
/* Add a SS: prefix */
|
||||||
|
State->PrefixFlags |= FAST486_PREFIX_SEG;
|
||||||
|
State->SegmentOverride = FAST486_REG_SS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Calculate the address */
|
/* Calculate the address */
|
||||||
ModRegRm->MemoryAddress = Base + Index * Scale;
|
ModRegRm->MemoryAddress = Base + Index * Scale;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue