...
            {
                int *r1, *r2;
                r1 = GetCorrectRegister(first);
                r2 = GetCorrectRegister(second);
                switch ((OpCode)current.opcode)
                {
                    case OpCode.ADDR:
                        r2 = r1 + r2;
                        break;
                }
            }
            ...

这是解决此问题的最明显,最简单的方法。但是,如果可以避免的话,我宁愿不要使用不安全的方法。基本上,我有一堆代表寄存器的整数。有些汇编指令将寄存器助记符作为参数。我宁愿没有逻辑来确定要在switch语句的每个分支中分配给哪个变量,也不要做出某种麻烦的GetRegisterValue(mnemonic)和SetRegisterValue(mnemonic)函数。有一些C#y方式可以做类似的事情吗?

最佳答案



显而易见,这里没有一堆整数。创建一个数组

 int[] registers = new int[NUMBER_OF_REGISTERS];

您上面的代码变成
    {
            int r1Index, r2Index;
            r1Index = GetCorrectRegisterIndex(first);
            r2Index = GetCorrectRegisterIndex(second);
            switch ((OpCode)current.opcode)
            {
                case OpCode.ADDR:
                    registers[r1Index] = registers[r1Index] + registers[r2Index];
                    break;
            }


     }

另外,使用enum为您的寄存器名称创建符号名称,其中每个名称都为您提供正确的索引。

10-06 04:11