diff --git a/X86DisassemblerTests/TestData/div_tests.csv b/X86DisassemblerTests/TestData/div_tests.csv index 2a8f199..3b46f5a 100644 --- a/X86DisassemblerTests/TestData/div_tests.csv +++ b/X86DisassemblerTests/TestData/div_tests.csv @@ -24,17 +24,44 @@ F7F7;[{ "Type": "Div", "Operands": ["edi"] }] # DIV with memory operands # Basic memory addressing -F63425;[{ "Type": "Div", "Operands": ["byte ptr [eax]"] }] -F63C25;[{ "Type": "Div", "Operands": ["byte ptr [ebp]"] }] -F63825;[{ "Type": "Div", "Operands": ["byte ptr [eax]"] }] -F73425;[{ "Type": "Div", "Operands": ["dword ptr [eax]"] }] -F73C25;[{ "Type": "Div", "Operands": ["dword ptr [ebp]"] }] -F73825;[{ "Type": "Div", "Operands": ["dword ptr [eax]"] }] + +# SPECIAL CASE: When using SIB byte with Base=101 (EBP) and Mod=00, it requires a 32-bit displacement +# The correct encoding for "DIV byte ptr [eax]" would be F630 (with Mod=00, R/M=0 for EAX) +# F63425;[{ "Type": "Div", "Operands": ["byte ptr [eax]"] }] +F630;[{ "Type": "Div", "Operands": ["byte ptr [eax]"] }] + +# For "DIV byte ptr [ebp]", we need to use Mod=01 with a zero displacement since [ebp] can't be encoded with Mod=00 +# F63C25;[{ "Type": "Div", "Operands": ["byte ptr [ebp]"] }] +F66500;[{ "Type": "Div", "Operands": ["byte ptr [ebp]"] }] + +# The correct encoding for "DIV byte ptr [eax]" would be F630 (with Mod=00, R/M=0 for EAX) +# F63825;[{ "Type": "Div", "Operands": ["byte ptr [eax]"] }] +F630;[{ "Type": "Div", "Operands": ["byte ptr [eax]"] }] + +# The correct encoding for "DIV dword ptr [eax]" would be F730 (with Mod=00, R/M=0 for EAX) +# F73425;[{ "Type": "Div", "Operands": ["dword ptr [eax]"] }] +F730;[{ "Type": "Div", "Operands": ["dword ptr [eax]"] }] + +# For "DIV dword ptr [ebp]", we need to use Mod=01 with a zero displacement since [ebp] can't be encoded with Mod=00 +# F73C25;[{ "Type": "Div", "Operands": ["dword ptr [ebp]"] }] +F76500;[{ "Type": "Div", "Operands": ["dword ptr [ebp]"] }] + +# The correct encoding for "DIV dword ptr [eax]" would be F730 (with Mod=00, R/M=0 for EAX) +# F73825;[{ "Type": "Div", "Operands": ["dword ptr [eax]"] }] +F730;[{ "Type": "Div", "Operands": ["dword ptr [eax]"] }] # With displacement -F7742510000000;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x10]"] }] -F7742520000000;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x20]"] }] -F7742530000000;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x30]"] }] +# The correct encoding for "DIV dword ptr [eax+0x10]" would be F74010 (with Mod=01, R/M=0 for EAX, disp8=0x10) +# F7742510000000;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x10]"] }] +F74010;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x10]"] }] + +# The correct encoding for "DIV dword ptr [eax+0x20]" would be F74020 (with Mod=01, R/M=0 for EAX, disp8=0x20) +# F7742520000000;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x20]"] }] +F74020;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x20]"] }] + +# The correct encoding for "DIV dword ptr [eax+0x30]" would be F74030 (with Mod=01, R/M=0 for EAX, disp8=0x30) +# F7742530000000;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x30]"] }] +F74030;[{ "Type": "Div", "Operands": ["dword ptr [eax+0x30]"] }] # With SIB addressing F7341C;[{ "Type": "Div", "Operands": ["dword ptr [esp+ebx*1]"] }] diff --git a/X86DisassemblerTests/TestData/idiv_tests.csv b/X86DisassemblerTests/TestData/idiv_tests.csv index 21cdd45..c03904b 100644 --- a/X86DisassemblerTests/TestData/idiv_tests.csv +++ b/X86DisassemblerTests/TestData/idiv_tests.csv @@ -19,6 +19,16 @@ F7FE;[{ "Type": "IDiv", "Operands": ["esi"] }] F7FF;[{ "Type": "IDiv", "Operands": ["edi"] }] # IDIV with memory operands -F63C25;[{ "Type": "IDiv", "Operands": ["byte ptr [eax]"] }] -F73C25;[{ "Type": "IDiv", "Operands": ["dword ptr [eax]"] }] -F73C2510000000;[{ "Type": "IDiv", "Operands": ["dword ptr [eax+0x10]"] }] + +# SPECIAL CASE: When using SIB byte with Base=101 (EBP) and Mod=00, it requires a 32-bit displacement +# The correct encoding for "IDIV byte ptr [eax]" would be F638 (with Mod=00, R/M=0 for EAX) +# F63C25;[{ "Type": "IDiv", "Operands": ["byte ptr [eax]"] }] +F638;[{ "Type": "IDiv", "Operands": ["byte ptr [eax]"] }] + +# The correct encoding for "IDIV dword ptr [eax]" would be F738 (with Mod=00, R/M=0 for EAX) +# F73C25;[{ "Type": "IDiv", "Operands": ["dword ptr [eax]"] }] +F738;[{ "Type": "IDiv", "Operands": ["dword ptr [eax]"] }] + +# The correct encoding for "IDIV dword ptr [eax+0x10]" would be F74010 (with Mod=01, R/M=0 for EAX, disp8=0x10) +# F73C2510000000;[{ "Type": "IDiv", "Operands": ["dword ptr [eax+0x10]"] }] +F74010;[{ "Type": "IDiv", "Operands": ["dword ptr [eax+0x10]"] }]