迭代简单指令集的所有可能性
Iterating all possibilities of a simple instruction set
假设我有一个非常简单的指令集模型:
opcode 0, arg1[0-1]
ocode 1, arg1[0-2], arg2[0-1]
所以我正在寻找一种用它构建无限复杂程序的方法。
第一个程序是:
0,0
next is,
0,1
then
0,0
1,0,0
then
0,0
1,1,0
etc
这样,给定由以下定义的任意指令集:
class Instruction
{
public int opcode;
public int[] argLimits; //the maximum value of each argument, and number of arguments
}
Instruction[] allInstructions;
可以根据上一个程序生成下一个程序。
例如:ExecutableInstruction[] GetNextProgram(ExecutableInstruction[] previous, Instruction[] instructionSet);
参数的值限制将始终为 [0-n]
参数都是必需的 - 如果一个操作码有 3 个参数,它们都是必需的。
我知道当参数数量固定时如何做这种事情,但是当每个操作码可以有 N 个参数时,每个操作码的每个参数的值可以是 0-n,我不确定在哪里开始。
列举您的指令以及所有可能的参数值,例如:
A: 0,0
B: 0,1
C: 1,0,0
D: 1,0,1
E: 1,0,2
F: 1,1,0
G: 1,1,1
H: 1,1,2
I: 1,2,0
J: 1,2,1
K: 1,2,2
现在任何程序都是 A-K
字母表中的任意一个词。我希望你知道如何继续。
假设我有一个非常简单的指令集模型:
opcode 0, arg1[0-1]
ocode 1, arg1[0-2], arg2[0-1]
所以我正在寻找一种用它构建无限复杂程序的方法。
第一个程序是:
0,0
next is,
0,1
then
0,0
1,0,0
then
0,0
1,1,0
etc
这样,给定由以下定义的任意指令集:
class Instruction
{
public int opcode;
public int[] argLimits; //the maximum value of each argument, and number of arguments
}
Instruction[] allInstructions;
可以根据上一个程序生成下一个程序。
例如:ExecutableInstruction[] GetNextProgram(ExecutableInstruction[] previous, Instruction[] instructionSet);
参数的值限制将始终为 [0-n] 参数都是必需的 - 如果一个操作码有 3 个参数,它们都是必需的。
我知道当参数数量固定时如何做这种事情,但是当每个操作码可以有 N 个参数时,每个操作码的每个参数的值可以是 0-n,我不确定在哪里开始。
列举您的指令以及所有可能的参数值,例如:
A: 0,0
B: 0,1
C: 1,0,0
D: 1,0,1
E: 1,0,2
F: 1,1,0
G: 1,1,1
H: 1,1,2
I: 1,2,0
J: 1,2,1
K: 1,2,2
现在任何程序都是 A-K
字母表中的任意一个词。我希望你知道如何继续。