首页 > 解决方案 > 如何访问 SUBLEQ 中的指针

问题描述

我最近开始学习 SUBLEQ 单指令集计算机,目前正在尝试为我编写的 SUBLEQ 仿真器编写一个简单的汇编程序。到目前为止,我已经实现了 DB、MOV、INC 和 DEC,但是当 MOV 指令有指针作为参数时,我有点挣扎。
例如:MOV 20, 21在 SUBLEQ 中将数据从地址 21 移动到地址 20 如下所示(假设地址 100 为零并且程序从地址零开始):

sble 20 20 3
sble 21 100 6
sble 100 20 9

目标地址处的内容清零,源地址处的内容减去两次后加到目标地址。

现在我的问题是:如果一个参数是一个指针,例如MOV 20, [21],地址 21 的内容指向我想要复制到地址 20 的真实数据,那么如何使用 SUBLEQ 来表示?

标签: pointersassemblyemulationinstruction-setmov

解决方案


我首先要说我对 subleq 在实践中的使用方式知之甚少,所以对这个答案持保留态度:

subleq 的一个缺点是使用指针非常困难,但它可以编辑自己的代码。这意味着您将不得不使用代码将正在查看的地址改写为 21。

例如,如果您以某种方式将代码转到附加在当前代码之后的行中,则可以使用以下命令:

# (I used the quotes to mean next line)
sble 3 3 " # set the first value of the second instruction to 0
sble 21 101 " # put the value of 21 into an unused address
sble 101 3 " # subtract the value of 101 and put it back into the code
sble 3 3 " # reset the value at 3 to 0

必须拥有一个 movp(移动指针)命令可能是一个不错的决定,这样您就不会在运行时意外弄乱您的 mov 命令代码

这意味着对于人们遇到的每个问题,必须以不同的方式考虑使用指针的新方法,但通常通过使用代码编辑代码来完成


推荐阅读