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

View File

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