diff --git a/include/instructions.h b/include/instructions.h index aca20c7..8e9b337 100644 --- a/include/instructions.h +++ b/include/instructions.h @@ -26,5 +26,6 @@ public: void xor_rm32_r32(); // 0x31 void nop(); // 0x90 void mov_ecx_imm32(); // 0xb9 + void mov_ebx_imm32(); // 0xbb void hlt(); // 0xf4 }; diff --git a/instructions.cpp b/instructions.cpp index abc537a..71278ee 100644 --- a/instructions.cpp +++ b/instructions.cpp @@ -23,6 +23,7 @@ void Instructions::init_instructions(){ this->instructions[0x31] = &Instructions::xor_rm32_r32; this->instructions[0x90] = &Instructions::nop; this->instructions[0xb9] = &Instructions::mov_ecx_imm32; + this->instructions[0xbb] = &Instructions::mov_ebx_imm32; this->instructions[0xf4] = &Instructions::hlt; } @@ -105,6 +106,15 @@ void Instructions::mov_ecx_imm32(){ this->eip += 3; } +void Instructions::mov_ebx_imm32(){ + printf("mov_ebx_imm32 called.\n"); + + this->eip++; + uint32_t imm32 = memory.read_uint32(this->eip); + this->registers[3] = imm32; + this->eip += 3; +} + void Instructions::hlt(){ printf("hlt called.\n"); this->eip = 0x00;