[FAST486]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 19 Feb 2014 20:24:53 +0000 (20:24 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 19 Feb 2014 20:24:53 +0000 (20:24 +0000)
- When pushing 16-bit value, check only low word of ESP (i.e. SP).
- Don't forget to clear high word of EIP, for the Jump instruction of group 4 (0xFF).

svn path=/branches/ntvdm/; revision=62258

lib/fast486/common.inl
lib/fast486/opgroups.c

index 97c5d4e..fff8fc0 100644 (file)
@@ -296,7 +296,7 @@ Fast486StackPush(PFAST486_STATE State,
         USHORT ShortValue = LOWORD(Value);
 
         /* Check if SP is 1 */
-        if (State->GeneralRegs[FAST486_REG_ESP].Long == 1)
+        if (State->GeneralRegs[FAST486_REG_ESP].LowWord == 1)
         {
             Fast486Exception(State, FAST486_EXCEPTION_SS);
             return FALSE;
index 7480296..0e560d5 100644 (file)
@@ -1632,6 +1632,9 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupFF)
         {
             /* Set the IP to the address */
             State->InstPtr.LowWord = Value;
+
+            /* Clear the top half of EIP */
+            State->InstPtr.Long &= 0xFFFF;
         }
         else if (ModRegRm.Register == 5)
         {