我正在尝试创建一个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谢谢你的建议
发布于 2016-06-14 03:38:59
大量条件的标准方法是swtich和字典或操作(Refactor long switch statement)。
https://stackoverflow.com/questions/37801977
复制相似问题