首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DEC PDP 8上的间接方向

DEC PDP 8上的间接方向
EN

Stack Overflow用户
提问于 2015-05-17 08:33:50
回答 2查看 136关注 0票数 2

在70年代中期编写DEC 8时,程序员使用间接方式来指示程序要跳转到哪里(我认为)。我发现它非常有用,我想知道在8086上使用了什么技术来产生相同的结果,或者指示什么取代了它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-17 08:47:04

如果您引用的是在http://www.cs.swan.ac.uk/~csneal/SystemSpec/MoreExamples.html中解释的“间接”,答案很简单:您没有。

x86指令集是CISC,因此不限于固定的指令宽度--处理器将自己计算出指令的长度,并且您不需要黑客来寻址超过(固定)指令大小的位置。

例如,jmp 100008283h将在我刚刚打开的二进制文件中转换为E9 AD 5E 00 00,而xor eax, eax将转换为31 C0

从这个意义上说,最接近于间接方向的是短距离跳跃--绝对跳跃占用了相当多的内存(见上面的例子),因此,如果目标在短跳的可达范围内,您基本上会跳到相对于当前位置的偏移量,并指定短跳上的“距离”。

票数 1
EN

Stack Overflow用户

发布于 2015-05-17 14:09:55

PDP8指令有两个寻址模式位,I和Z,和一个7位偏移。JMP指令有这些。

偏移量指定与PC相同的128字页中的内存位置,或“页0”中的内存位置,这取决于Z位。I位的意思是“读取已寻址的内存位置,将其用作操作数的地址”。Z位的意思是“使用零页”,而不是当前页。

若要跳转到同一128 word页面中的位置,请将I位和Z位指定为off。这与x86上最接近于具有8位(短)相对偏移量的“短相对jmp”相对应。

若要将控制转移到另一页上的固定目标位置,必须在当前页(或零页)中包含目标地址的单词。然后,使用i位集指定一个jmp,偏移量引用目标地址的位置。在实际使用中,这与x86上的“长相对jmp”最接近,后者具有32位相对偏移量。对于子例程调用,这对应于具有相同32位相对偏移量的“长相对调用”。

有时,您可能希望将控制传递给动态计算的地址。其中一个是PDP8,您只需做一个带有偏移量的JMP间接操作,该偏移量引用包含计算地址的位置。此操作与x86 JMP指令最接近。

在PDP8上,您使用上述技术从子例程返回。( JMS子例程调用指令将返回地址存储在子例程的第一个字处;没有堆栈)。在x86上,主要使用CALL和RET来实现子例程调用和返回。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30284936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档