迭代简单指令集的所有可能性

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 字母表中的任意一个词。我希望你知道如何继续。