Ty po prostu potrzebujesz x86 MOV
dyspozycję .
„M / o / Vfuscator (krótkie„ o ”, brzmi jak„ mobfuscator ”) kompiluje programy w instrukcje„ mov ”i tylko instrukcje„ mov ”. Arytmetyka, porównania, skoki, wywołania funkcji i wszystko inne, czego potrzebuje program, to wszystkie wykonywane za pomocą operacji przenoszenia; nie ma samomodyfikującego się kodu, żadnych obliczeń wyzwalanych przez transport i żadnej innej formy oszustwa bez ruchu. "
Poważnie jednak, te prymitywy nie zaimplementują maszyny Lisp. Maszyna potrzebuje udogodnień, takich jak operacje we / wy i czyszczenie pamięci. Nie wspominając o mechanizmie wywoływania funkcji! OK, masz siedem prymitywów, które są funkcjami. W jaki sposób maszyna wywołuje funkcję?
Prawidłowe zrozumienie tego, co te prymitywy umożliwiają, polega na tym, że ujawniają zestaw instrukcji Uniwersalnej Maszyny Turinga . Ponieważ te instrukcje są „Lispy”, przez przejęzyczenie (mówienie z Lispem) podstępnie nazywamy je „Lisp Machine”. „Uniwersalny” oznacza, że maszyna jest programowalna: z niektórymi instrukcjami kombinacji zastosowanymi do Universal Turing Machine, możemy utworzyć instancję dowolnej Maszyny Turinga. Ale jak dotąd wszystko to jest czysto matematyczną konstrukcją.
Aby faktycznie zasymulować ten UTM - zrealizować go fizycznie w celu zbadania go na komputerze, potrzebujemy maszyny, która zapewni nam sposób na wprowadzenie tych form, które tworzą Maszyny Turinga z kombinacji tych siedmiu instrukcji Lispa. Potrzebujemy też jakiejś formy wyjścia; maszyna, aby przynajmniej móc powiedzieć nam „tak”, „nie” lub „czekaj, nadal działam”.
Innymi słowy, jedyny sposób, w jaki te siedem instrukcji może praktycznie działać, to umieszczenie ich na większej maszynie, która zapewnia środowisko.
Zauważ również, że siedem prymitywów Grahama nie ma wyraźnego wsparcia dla liczb, więc musiałbyś zbudować je z funkcji (technika „liczebników kościelnych”). Żadna produkcyjna implementacja Lispa nie robi tak szalonej rzeczy.