计算机模拟器代码执行

时间:2016-06-14 02:19:47

标签: c# virtual-machine

我正在尝试创建一个MC6808微处理器仿真器。我的程序一直工作到将对象代码输入我的虚拟机。下一步是执行我的问题来自的程序。

解释 (虚拟)内存中所有代码(指令)的最有效方法是什么?由于每个代码执行涉及MC6808寄存器的特定行为(加,减,移等),我能想到的唯一解决方案是为197个可用代码中的每一个使用一系列IF语句。

    if (Instruction == 0x86) // LDAA #Value
   {
    accumulatorA = MC6800[(InstructionPointer + 1)];//Value location
    ProgLength -= 1;
    InstructionPointer += 2;
        UpdateRegisterStatus();
   }

我有一个包含所有寄存器,内存堆栈,地址指针等的MC6800类,我有一个所有可用助记符的列表:

        //List sample
        mnemonicsList.Add(new Mnemonics("ABA" , 0, 5, 0x1B, 1, 2, 4));
        mnemonicsList.Add(new Mnemonics("ADCA", 1, 1, 0x89, 2, 2, 1));
        mnemonicsList.Add(new Mnemonics("ADCA", 2, 2, 0x99, 2, 3, 1));
        mnemonicsList.Add(new Mnemonics("ADCA", 3, 3, 0xA9, 2, 5, 1));
        mnemonicsList.Add(new Mnemonics("ADCA", 4, 4, 0xB9, 3, 4, 1));
        mnemonicsList.Add(new Mnemonics("ADCB", 1, 1, 0xC9, 2, 2, 2));
        mnemonicsList.Add(new Mnemonics("ADCB", 2, 2, 0xD9, 2, 3, 2));
        mnemonicsList.Add(new Mnemonics("ADCB", 3, 3, 0xE9, 2, 5, 2));
        mnemonicsList.Add(new Mnemonics("ADCB", 4, 4, 0xF9, 3, 4, 2));

        //LIST KEY:  mnemonic, operand type, addressing mode, object code,
        //byte size, machine cycles, register used

感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

大量条件的标准方法是swtich和字典或操作(Refactor long switch statement)。