0
mirror of https://github.com/sampletext32/ParkanPlayground.git synced 2025-06-20 16:18:37 +03:00

Added comprehensive test coverage for arithmetic and logical instructions. Implemented AND instruction handlers and added tests for ADC, SBB, and arithmetic unary operations.

This commit is contained in:
bird_egop
2025-04-13 04:07:37 +03:00
parent b215908d76
commit af94b88868
15 changed files with 1084 additions and 0 deletions

View File

@ -1,4 +1,5 @@
using X86Disassembler.X86.Handlers.Add;
using X86Disassembler.X86.Handlers.And;
using X86Disassembler.X86.Handlers.ArithmeticImmediate;
using X86Disassembler.X86.Handlers.ArithmeticUnary;
using X86Disassembler.X86.Handlers.Call;
@ -56,6 +57,7 @@ public class InstructionHandlerFactory
// Register handlers in order of priority (most specific first)
RegisterArithmeticImmediateHandlers(); // Group 1 instructions (including 0x83)
RegisterAddHandlers();
RegisterAndHandlers();
RegisterArithmeticUnaryHandlers();
RegisterCmpHandlers();
RegisterXorHandlers();
@ -349,6 +351,24 @@ public class InstructionHandlerFactory
_handlers.Add(new PopRegHandler(_codeBuffer, _decoder, _length));
}
/// <summary>
/// Registers all And instruction handlers
/// </summary>
private void RegisterAndHandlers()
{
// Add AND handlers
_handlers.Add(new AndImmToRm8Handler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndImmToRm32Handler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndImmToRm32SignExtendedHandler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndR8Rm8Handler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndRm8R8Handler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndR32Rm32Handler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndMemRegHandler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndAlImmHandler(_codeBuffer, _decoder, _length));
_handlers.Add(new AndEaxImmHandler(_codeBuffer, _decoder, _length));
}
/// <summary>
/// Gets the handler that can decode the given opcode
/// </summary>