#include <stdio.h>
int main() {
// Define CPU registers
int registers[4] = {0}; // Four general-purpose registers
// Program memory (instructions)
int program[] = {0x1001, 0x2002, 0x3003, 0x4000}; // Sample instructions
// Instruction pointer
int ip = 0;
// Emulation loop
while (program[ip] != 0) {
int instruction = program[ip];
int opcode = (instruction >> 12) & 0xF;
int operand1 = (instruction >> 8) & 0xF;
int operand2 = instruction & 0xFF;
switch (opcode) {
case 0x1: // Add
registers[operand1] += operand2;
break;
case 0x2: // Subtract
registers[operand1] -= operand2;
break;
case 0x3: // Jump if zero
if (registers[operand1] == 0) {
ip = operand2;
continue; // Skip incrementing instruction pointer
}
break;
case 0x4: // Halt
return 0;
}
ip++;
}
for (int i=0; i<4; i++){
printf("registers[%d] = %d\n", i
, registers
[i
]); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbigpIHsKICAgIC8vIERlZmluZSBDUFUgcmVnaXN0ZXJzCiAgICBpbnQgcmVnaXN0ZXJzWzRdID0gezB9OyAvLyBGb3VyIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMKCiAgICAvLyBQcm9ncmFtIG1lbW9yeSAoaW5zdHJ1Y3Rpb25zKQogICAgaW50IHByb2dyYW1bXSA9IHsweDEwMDEsIDB4MjAwMiwgMHgzMDAzLCAweDQwMDB9OyAvLyBTYW1wbGUgaW5zdHJ1Y3Rpb25zCgogICAgLy8gSW5zdHJ1Y3Rpb24gcG9pbnRlcgogICAgaW50IGlwID0gMDsKCiAgICAvLyBFbXVsYXRpb24gbG9vcAogICAgd2hpbGUgKHByb2dyYW1baXBdICE9IDApIHsKICAgICAgICBpbnQgaW5zdHJ1Y3Rpb24gPSBwcm9ncmFtW2lwXTsKICAgICAgICBpbnQgb3Bjb2RlID0gKGluc3RydWN0aW9uID4+IDEyKSAmIDB4RjsKICAgICAgICBpbnQgb3BlcmFuZDEgPSAoaW5zdHJ1Y3Rpb24gPj4gOCkgJiAweEY7CiAgICAgICAgaW50IG9wZXJhbmQyID0gaW5zdHJ1Y3Rpb24gJiAweEZGOwoKICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewogICAgICAgICAgICBjYXNlIDB4MTogLy8gQWRkCiAgICAgICAgICAgICAgICByZWdpc3RlcnNbb3BlcmFuZDFdICs9IG9wZXJhbmQyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHgyOiAvLyBTdWJ0cmFjdAogICAgICAgICAgICAgICAgcmVnaXN0ZXJzW29wZXJhbmQxXSAtPSBvcGVyYW5kMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MzogLy8gSnVtcCBpZiB6ZXJvCiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJzW29wZXJhbmQxXSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaXAgPSBvcGVyYW5kMjsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBpbmNyZW1lbnRpbmcgaW5zdHJ1Y3Rpb24gcG9pbnRlcgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHg0OiAvLyBIYWx0CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgaXArKzsKICAgIH0KCiAgICBmb3IgKGludCBpPTA7IGk8NDsgaSsrKXsKICAgICAgICBwcmludGYoInJlZ2lzdGVyc1slZF0gPSAlZFxuIiwgaSwgcmVnaXN0ZXJzW2ldKTsKICAgIH0KICAgIHJldHVybiAwOwp9