自从我在大学里学会了如何操纵装配以来,我就着迷于尽可能小地开始并逐渐达到无限的复杂性的想法。我一直在研究自己的理论上最小的指令集,该指令集避免了诸如“ subleq”之类的复合指令。我对这类指令的问题在于,它们的行为就像是两个(或多个)具有维护状态的单独指令。换句话说,可以将它们分解为(IBM Pseudocode):
S R0,NUMBER
CLI R0,XL4'00'
BNH DESTINATION
因此,我想用来建立更多复杂性的最小指令集应该已经被原子化,并且不应包含状态。
到目前为止,我想出了三个指令:(s)撕裂,(n)和(j)ump。有一个累加器和一个PC计数器-没有别的了。所有指令取两位,后跟X位,其中包含相对地址,这意味着没有“立即数”值。我可以按照以下说明(8位)将这些值加载到累加器中:
00 000111 LOAD S HOLDER ; first we must zero-out the accumulator
01 000110 N HOLDER
01 000101 N HOLDER
00 000100 S HOLDER
01 000011 N HOLDER ; accumulator is now equal to zero
01 XXXXXX N NUMBER ; load number into accumulator
10 000010 J NEXT ; jump over the helper to the next instruction
00 000000 HOLDER = 0
XX XXXXXX NEXT ...
很明显,允许指令编辑有效地使条件跳转成为条件,但我尚不完全确定如何完成这样的任务。如此简单的事情还是图灵完成的,还是这个想法在空中?