...
{
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
为您的寄存器名称创建符号名称,其中每个名称都为您提供正确的索引。