[FAST486]

Check for division by zero, and generate the appropriate exception.


svn path=/branches/ntvdm/; revision=61204
This commit is contained in:
Aleksandar Andrejevic 2013-12-03 00:56:47 +00:00
parent e7a6deb93f
commit 2064d10bad

View file

@ -1012,8 +1012,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF6)
/* DIV */
case 6:
{
UCHAR Quotient = State->GeneralRegs[FAST486_REG_EAX].LowWord / Value;
UCHAR Remainder = State->GeneralRegs[FAST486_REG_EAX].LowWord % Value;
UCHAR Quotient, Remainder;
if (Value == 0)
{
/* Divide error */
Fast486Exception(State, FAST486_EXCEPTION_DE);
return FALSE;
}
Quotient = State->GeneralRegs[FAST486_REG_EAX].LowWord / Value;
Remainder = State->GeneralRegs[FAST486_REG_EAX].LowWord % Value;
/* Write back the results */
State->GeneralRegs[FAST486_REG_EAX].LowByte = Quotient;
@ -1025,8 +1034,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF6)
/* IDIV */
case 7:
{
CHAR Quotient = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord / (CHAR)Value;
CHAR Remainder = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord % (CHAR)Value;
CHAR Quotient, Remainder;
if (Value == 0)
{
/* Divide error */
Fast486Exception(State, FAST486_EXCEPTION_DE);
return FALSE;
}
Quotient = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord / (CHAR)Value;
Remainder = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord % (CHAR)Value;
/* Write back the results */
State->GeneralRegs[FAST486_REG_EAX].LowByte = (UCHAR)Quotient;
@ -1225,6 +1243,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF7)
/* DIV */
case 6:
{
if (Value == 0)
{
/* Divide error */
Fast486Exception(State, FAST486_EXCEPTION_DE);
return FALSE;
}
if (OperandSize)
{
ULONGLONG Dividend = (ULONGLONG)State->GeneralRegs[FAST486_REG_EAX].Long
@ -1254,6 +1279,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF7)
/* IDIV */
case 7:
{
if (Value == 0)
{
/* Divide error */
Fast486Exception(State, FAST486_EXCEPTION_DE);
return FALSE;
}
if (OperandSize)
{
LONGLONG Dividend = (LONGLONG)State->GeneralRegs[FAST486_REG_EAX].Long