add add opcode
This commit is contained in:
@@ -142,10 +142,23 @@ int main(int argc, const char* argv[]) {
|
|||||||
{BR};
|
{BR};
|
||||||
break;
|
break;
|
||||||
case OP_ADD:
|
case OP_ADD:
|
||||||
|
uint16_t dr = (instr >> 9) & 0x7; // destination register
|
||||||
|
uint16_t sr1 = (instr >> 6) & 0x7; // source register 1
|
||||||
|
uint16_t sr2; // source register 2
|
||||||
|
uint16_t imm_flag = (instr >> 5) & 0x1; // immediate mode flag (bit[5])
|
||||||
|
uint16_t imm5; // immediate mode register
|
||||||
|
|
||||||
|
if(imm_flag == 0) {
|
||||||
|
uint16_t sr2 = (instr & 0x7);
|
||||||
|
reg[dr] = reg[sr1] + sr2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
imm5 = sign_extend(instr & 0x1F, 5);
|
||||||
|
reg[dr] = reg[sr1] + imm5;
|
||||||
|
}
|
||||||
|
|
||||||
|
update_flags(dr);
|
||||||
|
|
||||||
// {ADD};
|
|
||||||
break;
|
break;
|
||||||
case OP_LD:
|
case OP_LD:
|
||||||
{LD};
|
{LD};
|
||||||
|
|||||||
Reference in New Issue
Block a user