Create funzioni check registri

This commit is contained in:
Giulio De Pasquale 2017-07-08 23:06:40 +02:00
parent b881b7f9a2
commit 7eb95ac130
2 changed files with 24 additions and 5 deletions

View File

@ -128,7 +128,24 @@ void VM::initVariables(void) {
} }
return; return;
} }
bool VM::dstRegCheck(uint8_t reg) {
if (reg == IP || reg == SP || reg == RP) {
DBG_ERROR(("Invalid register!\n"));
return false;
}
return true;
}
bool VM::srcDstRegCheck(uint8_t dst, uint8_t src) {
if (dst == IP || dst == SP || dst == RP) {
DBG_ERROR(("Invalid register!\n"));
return false;
}
if (src == IP || src == SP || src == RP) {
DBG_ERROR(("Invalid register!\n"));
return false;
}
return true;
}
/* /*
INSTRUCTIONS IMPLEMENTATIONS INSTRUCTIONS IMPLEMENTATIONS
*/ */
@ -142,10 +159,8 @@ bool VM::execMOVI(void) {
dst = as.code[regs[IP] + 1]; dst = as.code[regs[IP] + 1];
imm = *((uint16_t *)&as.code[regs[IP] + 2]); imm = *((uint16_t *)&as.code[regs[IP] + 2]);
DBG_INFO(("MOVI %s, 0x%x\n", getRegName(dst), imm)); DBG_INFO(("MOVI %s, 0x%x\n", getRegName(dst), imm));
if (dst == IP || dst == SP || dst == RP) { if (!dstRegCheck(dst))
DBG_ERROR(("MOVI: Invalid register!\n"));
return false; return false;
}
regs[dst] = imm; regs[dst] = imm;
return true; return true;
} }
@ -160,7 +175,8 @@ bool VM::execMOVR(void) {
dst = as.code[regs[IP] + 1] >> 4; dst = as.code[regs[IP] + 1] >> 4;
src = as.code[regs[IP] + 1] & 0b00001111; src = as.code[regs[IP] + 1] & 0b00001111;
DBG_INFO(("MOVR %s, %s\n", getRegName(dst), getRegName(src))); DBG_INFO(("MOVR %s, %s\n", getRegName(dst), getRegName(src)));
if (dst == IP || src == IP || dst == SP || src == SP || dst == RP || src== RP) { if (dst == IP || src == IP || dst == SP || src == SP || dst == RP ||
src == RP) {
DBG_ERROR(("MOVR: Invalid register!\n")); DBG_ERROR(("MOVR: Invalid register!\n"));
return false; return false;
} }

View File

@ -16,6 +16,9 @@ private:
/////////////////////// ///////////////////////
void initVariables(void); void initVariables(void);
void encryptOpcodes(uint8_t *key); void encryptOpcodes(uint8_t *key);
bool dstRegCheck(uint8_t reg);
bool srcDstRegCheck(uint8_t dst, uint8_t src);
/* /*
DBG UTILS DBG UTILS
*/ */