你能写信给[PC]吗?

时间:2012-04-05 15:13:40

标签: dcpu-16

根据DCPU specificationSET指令失败的唯一时间是a值是文字。

以下工作会如何?

SET [PC],0x1000

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

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

2 个答案:

答案 0 :(得分:7)

可能(=我认为它应该有用,但我没试过)。

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

着名用例:

  1. Windows 95使用这样的代码在堆栈上构建图形渲染代码。
  2. 病毒和特洛伊木马将此作为攻击媒介(在堆栈上编写代码或操纵返回地址以模拟JMP
  3. 模拟C64上的开关语句

答案 1 :(得分:4)

[PC]没有任何价值,所以我猜你需要通过将PC存储在可用作指针(注册表或内存)的东西中来实现这种方式。

        SET  A , PC
        SET [A+3], 0x8dc3 ; SUB PC, 3 (if A can't be changed from outside SUB PC,2 works too.)