首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDP-11汇编子程序

PDP-11汇编子程序
EN

Stack Overflow用户
提问于 2013-05-14 23:46:13
回答 1查看 212关注 0票数 0

所以我正在写一个汇编程序,我试着使用子例程,但是我有一个问题。我写了一个类似于开关情况的例程。它读取一个输入,并根据它的值,将以下子例程的地址写入堆栈中的保留地址。

它看起来像这样:

代码语言:javascript
复制
1000    jsr r5,switchcase
    // let the return address be 1004
1004    jsr r5,@0(sp)

第一个jsr转到切换用例,它写入堆栈中的第一个地址。第二个跳转到该地址。

我正在使用一个模拟器,每次它到达这一行,它就会停止。我不知道哪里出了问题:/

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-05-15 04:09:24

指令jsr r5,@0(sp)将旧的r5压入堆栈,并将当前的R7 (PC)放入r5。因此,您的程序不会跳转到堆栈上的地址,而是跳转到存储在r5中的地址。

因此,在您的示例中,第一条jsr指令将r5写入堆栈,然后将1004赋值给r5

编辑:当程序返回rts时,它从堆栈恢复r5的旧值。

第二个jsr指令再次将该值推送到堆栈上,然后跳转到该地址,因为它位于堆栈顶部(距离0)。

如果用第一个jsr调用的子例程确实在堆栈顶部留下了一个子例程地址,并且第二个jsr应该跳到那里,则必须使用jsr r5,@2(sp)。但我认为这是比好的编程风格更重要的事情。

希望这次我没弄错..。

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

https://stackoverflow.com/questions/16547531

复制
相关文章

相似问题

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