SIC中链接寄存器的作用、RETADR存储意义及子程序调用机制问询
SIC链接寄存器作用与子程序调用机制
一、链接寄存器(LR)的实际作用
SIC架构里,链接寄存器的核心功能就是保存子程序调用后的返回地址:当主程序执行JSUB指令调用子程序时,CPU会自动把JSUB下一条指令的地址存入LR,这样子程序执行完后,就能通过LR找到回到主程序的位置。
二、程序中存储LR到RETADR的原因
你提供的这段汇编代码是子程序的入口部分:
- 虽然当前代码片段没看到
RSUB,但如果这个子程序后续还要调用其他子程序(执行新的JSUB),新的JSUB会覆盖LR里的值(每次JSUB都会把新的返回地址写入LR)。 - 提前用
STL RETADR把LR的值存到内存,是为了保存当前的返回地址,避免被后续的子程序调用覆盖。等需要返回主程序时,再把RETADR里的值重新加载回LR,执行RSUB就能正确返回。
三、SIC的子程序调用完整流程
- 主程序发起调用:执行
JSUB 子程序名指令- CPU自动将
JSUB下一条指令的地址写入LR - 程序计数器(PC)跳转到子程序入口,开始执行子程序逻辑
- CPU自动将
- 子程序保存返回地址(按需操作):如果子程序要嵌套调用其他子程序,就先把LR的值存入内存(比如你的代码里的操作);如果不需要嵌套,这一步可以省略
- 子程序执行功能:完成自身任务,若有嵌套调用,执行完子子程序后要恢复之前保存的LR值
- 子程序返回:执行
RSUB指令- CPU自动将LR中的值加载到PC
- PC回到主程序中
JSUB的下一条指令,继续执行主程序逻辑
内容的提问来源于stack exchange,提问作者Fury
相关产品推荐
相关产品推荐

