我正在尝试创建一个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
感谢您的任何建议