Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图灵完整字母数字x86指令集(子集)_X86_Alphanumeric_Opcode_Turing Complete - Fatal编程技术网

图灵完整字母数字x86指令集(子集)

图灵完整字母数字x86指令集(子集),x86,alphanumeric,opcode,turing-complete,X86,Alphanumeric,Opcode,Turing Complete,我希望创建一个最小的、计算通用的字母数字x86操作码子集。最终,我希望子集包含尽可能少的指令,如果有多个最小子集,我也想知道这一点。子集应该能够模拟任何可以用整套字母数字指令编写的程序。说明应仅涵盖与字符“A-Z”、“A-Z”和“0-9”相对应的说明 到目前为止,我认为一个push,pop,inc,dec,cmp,和je就足够了,但我确信还有一个更小的集合。我如何证明我生成的集合能够使用所有字母数字指令模拟任何程序?我怎么能证明这样一个集合是极小的呢?有人知道这样的指令子集是否存在吗?它只是一条

我希望创建一个最小的、计算通用的字母数字x86操作码子集。最终,我希望子集包含尽可能少的指令,如果有多个最小子集,我也想知道这一点。子集应该能够模拟任何可以用整套字母数字指令编写的程序。说明应仅涵盖与字符“A-Z”、“A-Z”和“0-9”相对应的说明


到目前为止,我认为一个
push
pop
inc
dec
cmp
,和
je
就足够了,但我确信还有一个更小的集合。我如何证明我生成的集合能够使用所有字母数字指令模拟任何程序?我怎么能证明这样一个集合是极小的呢?有人知道这样的指令子集是否存在吗?

它只是一条指令!这是证据


为什么??因为“指令”是一个依赖于机器的概念。你不能仅仅因为没有这样的通用/绝对/原子指令就定义一小部分指令:这完全取决于底层硬件:事实上,“真正的”图灵机是一个数学概念(一组规则)而不是物理机器

我不确定我是否明白你的问题,特别是关于“字母数字”的部分,但我想指出的是,众所周知,和都是图灵完备的。

您当然可以从列表中删除
inc
dec
,您不必同时拥有这两个选项。:)
inc
dec
不能被一个接受
add
的负数替换吗?正如Alexey所说,只需要
inc
dec
中的一个,因为最终会发生溢出。这取决于您希望允许的效率有多低;例如。如果您想实际模拟其他x86指令,以便可以在寄存器中使用类似的值(而不必将内容分解为单个位),那么您需要的不仅仅是mov。至少一个布尔值(可能是BMI1
和n
)。您可以使用一个生成和传播进位的循环来模拟add,直到您处理完所有进位。IDK您对a-Za-z0-9的意思是什么。这个字符集覆盖了所有x86指令,包括AVX之类的东西,它有一个隐式的
lock
前缀,使其成为一个原子RMW。(与
cmpxchg8b
和其他接受
lock
的指令不同)和FP FMA。你的意思是不允许在助记符中使用空格,即不允许使用前缀吗?这与我的问题无关,我的问题非常具体。但是你可以将那里的指令拆分为x86指令。例如,SBNZ可以通过
sub
jne
实现,
subeg
可以通过
sub
js
进行仿真。。。