Вы можете написать на [ПК]?
Согласно спецификации DCPU, единственный раз, когда SET
инструкция не выполняется, если a
значение является буквальным.
Так будет ли работать следующее?
SET [PC],0x1000
Более полезной версией будет установка смещения PC
Итак, довольно странный бесконечный цикл будет:
SET [PC+0x2],0x89C3 ; = SUB PC,0x2
2 ответа
Вероятно (= Я думаю, что это должно работать, но я не пытался).
Это называется "самоизменяющимся" кодом и было довольно распространено в эпоху 8 бит из-за а) ограниченной оперативной памяти и б) ограниченного размера кода. Такой код очень мощный, но подвержен ошибкам. Если ваша кодовая база растет, это может быстро стать кошмаром обслуживания.
Известные случаи использования:
- Windows 95 использовал подобный код для построения кода рендеринга графики в стеке.
- Вирусы и трояны используют это как вектор атаки (напишите код в стеке или манипулируйте адресами возврата, чтобы симулировать
JMP
) - Имитация операторов переключения на C64
Нет никакого значения для [ПК], поэтому я предполагаю, что вы должны сделать это в обход, храня ПК в чем-то, что вы можете использовать в качестве указателя (реестр или память).
КОМПЛЕКТ А, ПК SET [A+3], 0x8dc3; SUB PC, 3 (если A нельзя заменить извне SUB PC, тоже работает 2).