Полный буквенно-цифровой набор инструкций Turing x86 (подмножество)

Я хочу создать минимальное универсальное в вычислительном отношении подмножество буквенно-цифровых кодов операций x86. В конце концов я хочу, чтобы подмножество содержало как можно меньше инструкций, и если есть несколько минимальных подмножеств, я также хочу это знать. Подмножество должно быть в состоянии имитировать любую программу, которая может быть написана с полным набором буквенно-цифровых инструкций. Инструкции должны охватывать только те инструкции, которые соответствуют символам «A-Z», «a-z» и «0-9».

На данный момент я думаю, что push, pop, inc, dec, cmp и je будет достаточно, но я уверен, что есть меньший набор. Как мне доказать, что сгенерированный мной набор способен имитировать любую программу, использующую все буквенно-цифровые инструкции? Как доказать, что такое множество минимально? Кто-нибудь знает, существует ли такое подмножество инструкций?


person cytinus    schedule 21.05.2012    source источник
comment
Вы можете исключить из списка либо inc, либо dec, вам не обязательно иметь оба. :)   -  person Alexey Frunze    schedule 23.05.2012
comment
Нельзя ли inc и dec заменить одним отрицательным числом add?   -  person Nyerguds    schedule 04.07.2012
comment
Как сказал Алексей, необходим только один из inc или dec, потому что в конечном итоге произойдет переполнение.   -  person cytinus    schedule 05.07.2012
comment
Это зависит от того, насколько неэффективно вы хотите разрешить; например Почему перемещение завершено?. Если вы хотите на самом деле эмулировать другие инструкции x86, чтобы вы могли работать с похожими значениями в регистрах (вместо того, чтобы разбивать все на отдельные биты), вам понадобится больше, чем просто mov. Хотя бы одно логическое значение (возможно, BMI1 andn). Вы можете эмулировать добавление с помощью цикла, который генерирует и распространяет перенос до тех пор, пока вы не обработаете все переносы.   -  person Peter Cordes    schedule 09.02.2021
comment
ИДК, что ты имеешь в виду под A-Za-z0-9. Этот набор символов охватывает все инструкции x86, включая такие вещи, как AVX vextractf128 и xchg, который имеет неявный префикс lock, что делает его атомарным RMW. (В отличие от cmpxchg8b и других инструкций, которые принимают lock.) И vfmadd132ps FP FMA. Вы имели в виду, что запрещаете пробел в мнемонике, то есть без префиксов?   -  person Peter Cordes    schedule 09.02.2021


Ответы (2)


Я не уверен, что понял ваш вопрос, особенно ту часть, которая касается «буквенно-цифрового», но я хотел бы отметить, что хорошо известно, что оба mov и xor завершены по Тьюрингу.

person kirelagin    schedule 25.09.2015

Это всего лишь ОДНА инструкция! вот доказательство

http://en.wikipedia.org/wiki/One_instruction_set_computer

Почему? Просто потому, что «инструкция» — машинно-зависимое понятие. Вы не можете определить небольшой набор инструкций только потому, что не существует таких универсальных/абсолютных/атомарных инструкций: все зависит от базового оборудования: на самом деле «настоящая» машина Тьюринга — это математическая концепция (набор правил), а не физическая машина

person Gianluca Ghettini    schedule 08.11.2012
comment
Это не имеет ничего общего с моим вопросом, который очень специфичен. - person cytinus; 08.11.2012
comment
но можно взять инструкции там и разбить на x86 инструкции. Например, SBNZ можно получить с помощью sub и jne, SUBNEG можно эмулировать с помощью sub и js... - person phuclv; 22.04.2015