登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [lc3]LC-3 另一个模拟栈的方法[zt]     [回主站]     [分站链接]
[lc3]LC-3 另一个模拟栈的方法[zt]
clq
浏览(197) - 2023-04-10 21:49:20 发表 编辑

关键字:

[lc3]LC-3 另一个模拟栈的方法[zt]

http://events.jianshu.io/p/62735edeab71

----------------------------------------------------------------

LC3 Stack


Stack 函数调用指南


1. 函数调用的标准:

R6 作为TOS(Top of stack) 栈顶(又叫 Stack Pointer / ESP)

R7 作为Return Address Pointer

R5 作为 Frame Pointer


2. 核心的Frame

一个函数运行会需要记录参数、内部局部变量,返回值,返回地址等信息

以上信息的排列就是一个Frame


--------- Frame顶部 ---------

最后一个本地局部变量

...

本地变量3

本地变量2

本地变量1

FP -- Parent Frame Pointer( 上层FP的地址 )

RA -- Return Address(返回的地址)

RV - Return Value

参数n

...

参数2

参数1

--------- Frame 底部 ---------



在函数运行时,R5一般指向本层Frame的FP(储存了上层FP指针的内存单元的地址)

R6 一般是指向栈顶,每次在栈上申请内存时就会移动R6,在调用子函数,写入传入的变量时,也需要移动R6,自函数



调用子函数

int main(){

short d;

d = foo(a,b,c)

}


在main调用foo的过程

(local) d = 0 <- TOS

FP = 全局入口

RA = 全局结束

RV = 0


main准备调用 :1.移动TOS,2. 写入参数a,b,c 3.保存重点寄存器,调用

foo 接受调用 : 1. 保存上一层FP,RA 2.移动FP到本层FP对应位置,3. 申请局部变量,移动TOS

foo返回: 1.写入返回值到RV位置,2.恢复上级FP,RA 3移动TOS到RV 4.RET

main 接受返回值,从TOS拿到返回值,修正TOS到调用之前的位置(+1)



总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1