我在试着理解PDP-11程序集。为此,我正在浏览这文档。
PDP-11有几套指令类型.一个是单操作数指令,另一个是双操作数指令。例如,双操作数指令是:
MOV @(R0)+,R1...which (如果我正确理解的话)从R0指向的内存中选择数据,然后递增R0,然后将从内存中获得的数据存储到R1中。
但是单操作数指令呢?例如:
INC @(R0)+会发生什么呢?会否:
或者是2跳还是5跳?
发布于 2018-09-23 17:59:52
本手册在第3.3.3节中包含了一个INC -(R0)示例,其中澄清了在指令的主要操作之前/之后增加/减少一次:
3.3.3自动递减模式 ..。 自动减量模式示例
INC -(R0),八进制代码:005240,指令名:增量
操作:R0的内容减少2,并用作操作数的地址。操作数增加1。INCB -(R0),八进制代码:105240,指令名:增量
操作:R0的内容减少1,并用作操作数的地址。操作数增加1。发布于 2022-03-07 17:11:47
我已经35年没有使用我最喜欢的PDP-11了,但我记得:
MOV @(R0)+,R1
由于MOV是一个字指令,而不是字节,所以所有的增量/递减都是2,因为它们是字边界,必须保持字边界的完整性。对于指令MOVB,字节边界的增量为1,字节边界的增量为1。
@()是一个双间接的,因此数据不是R0的值指向的位置,而是(R0)所指向的位置。增量位于源操作数之后,使其成为后增量,因此在移动数据后,它将R0转储为2。命令
MOV -@(R0),R2语法可以是@-()
预减量2,然后从更新的R0指向的位置获取值,然后将该值用作指向将数据转移到R2的位置的指针。
它在理解它是单操作数还是双操作数命令方面没有区别,因为所有的模式都适用于每个操作数。唯一的例外是您可能不想将数据存储到程序中,例如MOV R0,(PC)+,但是您可以这样做……我们过去总是这样节省内存,但通常是从一个源操作数(见下文)。
希望这对我们有帮助,因为这已经是几年前的事了。
--
我们在64K字节的计算机中通过在指令中嵌入变量值并按照这样的顺序执行代码(如下面的2行)来节省内存,
上海证券交易所(上海)有限公司.不确定确切的语法
ABC:.WORD 0
.不再确定那个语法是否能保留一个单词的空间
它将变量ABC嵌入到MOV指令的操作数中.再查一遍,但我记得。这是因为当MOV被解码时,PC已经指向偏移值所在的下一个字,然后在完成后取2到下一个指令。
https://stackoverflow.com/questions/52468730
复制相似问题