diff options
| author | 0x221E <0x221E@0xinfinity.dev> | 2026-04-12 16:59:40 +0200 |
|---|---|---|
| committer | 0x221E <0x221E@0xinfinity.dev> | 2026-04-12 16:59:40 +0200 |
| commit | a66c7433c2c11b8b6c99142277ed4e16b1a2a465 (patch) | |
| tree | e54bcfb59c303acf6118fd11f06d5c0bd5f24e5d /src/DataTransfer.cpp | |
Diffstat (limited to 'src/DataTransfer.cpp')
| -rw-r--r-- | src/DataTransfer.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/DataTransfer.cpp b/src/DataTransfer.cpp new file mode 100644 index 0000000..f7cc063 --- /dev/null +++ b/src/DataTransfer.cpp @@ -0,0 +1,30 @@ +#include "DataTransfer.h" + +#include "ExecutorCases.h" +#include "Instruction.h" +#include "CPUContext.h" +#include "Bus.h" + +#include <iostream> + +namespace executor_cases { + + void Mov_rm32_r32(CPUContext& cc) { + x86::ModRM modrm = cc.m_Instruction.m_ModRM; + + std::cout << "[Instruction] "; + + switch(modrm.m_State) { + case x86::ModRMState::R: + cc.m_Registers[modrm.m_Rm] = cc.m_Registers[modrm.m_Reg]; + std::cout << "mov " << x86::Register2Str((x86::Register)modrm.m_Rm) << ", " << x86::Register2Str((x86::Register)modrm.m_Rm); + break; + default: + cc.m_Bus->WriteX<uint32_t>(helpers::ResolveModRMAddress(cc), cc.m_Registers[modrm.m_Reg]); + std::cout << "mov DWORD PTR [0x" << helpers::ResolveModRMAddress(cc) << "], " << x86::Register2Str((x86::Register)modrm.m_Reg); + break; + } + + std::cout << std::endl; + } +} |
