Вы можете написать на [ПК]?

Согласно спецификации DCPU, единственный раз, когда SET инструкция не выполняется, если a значение является буквальным.

Так будет ли работать следующее?

SET [PC],0x1000

Более полезной версией будет установка смещения PCИтак, довольно странный бесконечный цикл будет:

SET [PC+0x2],0x89C3 ; = SUB PC,0x2

2 ответа

Решение

Вероятно (= Я думаю, что это должно работать, но я не пытался).

Это называется "самоизменяющимся" кодом и было довольно распространено в эпоху 8 бит из-за а) ограниченной оперативной памяти и б) ограниченного размера кода. Такой код очень мощный, но подвержен ошибкам. Если ваша кодовая база растет, это может быстро стать кошмаром обслуживания.

Известные случаи использования:

  1. Windows 95 использовал подобный код для построения кода рендеринга графики в стеке.
  2. Вирусы и трояны используют это как вектор атаки (напишите код в стеке или манипулируйте адресами возврата, чтобы симулировать JMP)
  3. Имитация операторов переключения на C64

Нет никакого значения для [ПК], поэтому я предполагаю, что вы должны сделать это в обход, храня ПК в чем-то, что вы можете использовать в качестве указателя (реестр или память).

        КОМПЛЕКТ А, ПК
        SET [A+3], 0x8dc3; SUB PC, 3 (если A нельзя заменить извне SUB PC, тоже работает 2).
Другие вопросы по тегам