Patch: Fix DISP32 for ADD_RM32_R32

This commit is contained in:
0x221E
2026-02-04 22:56:38 +01:00
parent 92b4d0b546
commit fe1370359e
3 changed files with 11 additions and 2 deletions

View File

@@ -52,6 +52,15 @@ namespace executor_cases {
cc.m_Bus->WriteX<uint32_t>(dstAddress, result); cc.m_Bus->WriteX<uint32_t>(dstAddress, result);
break; break;
} }
case x86::ModRMState::DISP32:
{
uint32_t dstAddress = cc.m_Instruction.m_Operand1;
uint32_t dstPrevValue = cc.m_Bus->AccessX<uint32_t>(dstAddress);
uint32_t currRegValue = cc.m_Registers[modrm.m_Reg];
uint32_t result = dstPrevValue + currRegValue;
cc.m_Bus->WriteX<uint32_t>(dstAddress, result);
break;
}
default: default:
{ {
throw std::runtime_error("Invalid ModRM State encountered during Add_rm32_r32"); throw std::runtime_error("Invalid ModRM State encountered during Add_rm32_r32");

View File

@@ -31,7 +31,7 @@ namespace x86 {
switch(mod) { switch(mod) {
case 0b00000000: case 0b00000000:
state = ModRMState::LR; state = ModRMState::LR;
if(reg == 0b00000101) if(rm == 0b00000101)
state = ModRMState::DISP32; state = ModRMState::DISP32;
break; break;
case 0b01000000: case 0b01000000:

View File

@@ -8,7 +8,7 @@
uint8_t test[] = { uint8_t test[] = {
0xB8, 0xF4, 0x00, 0x00, 0x00, 0xB8, 0xF4, 0x00, 0x00, 0x00,
0xB9, 0x00, 0x80, 0x00, 0x00, 0xB9, 0x00, 0x80, 0x00, 0x00,
0x01, 0x81, 0x10, 0x00, 0x00, 0x00, 0x01, 0x05, 0x10, 0x80, 0x00, 0x00,
0x00, 0x00,
}; };