From 1af1ff44fd4c800e177fe6e0555faa6da76da5a7 Mon Sep 17 00:00:00 2001 From: tuz358 Date: Sun, 18 Mar 2018 16:06:58 +0900 Subject: [PATCH] Add xor_rm32_imm(0x81,0x83) instruction --- include/instructions.h | 1 + instructions.cpp | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/include/instructions.h b/include/instructions.h index 1fa0e79..7a1918c 100644 --- a/include/instructions.h +++ b/include/instructions.h @@ -138,5 +138,6 @@ public: void sbb_rm32_imm(int imm_flag); void and_rm32_imm(int imm_flag); void sub_rm32_imm(int imm_flag); + void xor_rm32_imm(int imm_flag); void cmp_rm32_imm8(); }; diff --git a/instructions.cpp b/instructions.cpp index e969b35..ec23826 100644 --- a/instructions.cpp +++ b/instructions.cpp @@ -490,7 +490,7 @@ void Instructions::opcode_81(){ sub_rm32_imm(IMM32); break; case 6: - // TODO: xor_rm32_imm32(); + xor_rm32_imm(IMM32); break; case 7: // TODO: cmp_rm32_imm8(); @@ -526,7 +526,7 @@ void Instructions::opcode_83(){ sub_rm32_imm(IMM8); break; case 6: - // TODO: xor_rm32_imm8(); + xor_rm32_imm(IMM8); break; case 7: cmp_rm32_imm8(); @@ -892,6 +892,24 @@ void Instructions::sub_rm32_imm(int imm_flag){ this->eip++; } +void Instructions::xor_rm32_imm(int imm_flag){ + //printf("xor_rm32_imm called.\n"); + + this->eip++; + + if(imm_flag == IMM8){ + uint8_t imm8 = memory.read_uint8(this->eip); + this->registers[this->M] ^= imm8; + } else if(imm_flag == IMM32){ + uint32_t imm32 = memory.read_uint32(this->eip); + imm32 = swap_endian32(imm32); + this->registers[this->M] ^= imm32; + } else { + } + + this->eip++; +} + void Instructions::cmp_rm32_imm8(){ //printf("cmp_rm32_imm8 called.\n");