你能写信给[PC]吗?

Mat*_*att 7 dcpu-16

根据DCPU规范,SET指令失败的唯一时间是a值是文字.

那么下面的工作呢?

SET [PC],0x1000
Run Code Online (Sandbox Code Playgroud)

一个更有用的版本是设置偏移量PC,所以一个相当奇怪的无限循环将是:

SET [PC+0x2],0x89C3 ; = SUB PC,0x2
Run Code Online (Sandbox Code Playgroud)

Aar*_*lla 7

可能(=我认为它应该工作,但我没有尝试).

这被称为"自修改"代码,并且在8位时代非常普遍,因为a)有限的RAM和b)有限的代码大小.这样的代码非常强大但容易出错.如果您的代码库增长,这很快就会成为维护的噩梦.

着名用例:

  1. Windows 95使用这样的代码在堆栈上构建图形渲染代码.
  2. 病毒和木马使用它作为攻击向量(在堆栈上编写代码或操纵返回地址以模拟a JMP)
  3. 模拟C64上的switch语句