Grad-ProbAsk 板


LINE

※ 引述 《skyHuan (Huan)》 之铭言: :   : ※ 引述《AAQ8 ()》之铭言: : : https://i.imgur.com/RJjsPLH.jpg :   :   : 看懂这段程式前我们要先有两个概念 :   : 1. 原函式(caller)与被呼叫函式(callee)的关系 : 呼叫函式前因为callee会用到暂存器 : 所以要先将暂存器的变数存到stack中 : 以免原来在暂存器中的值被盖掉 : 导致callee return之後caller无法继续执行 : 一般储存变数到stack的工作由caller跟callee分工 : caller负责存a开头跟t开头的暂存器 : 而ra跟s开头的暂存器交由callee负责存 : 原因是如果callee没有用到这些暂存器就可以不用花时间去存 :   : 2. 这个程式可以想成是这样运作的: : https://imgur.com/2brKrPw.jpg
: 所以是main呼叫f (此时main是caller、f是callee) : 然後f呼叫func (此时f是caller、func是callee) :   :   : 有了这两个概念後我们就来看这段程式 : https://imgur.com/xizcMRg.jpg
: 因为f是main的callee又要当caller呼叫func : 所以要store ra跟s开头的暂存器到stack中 : 以免等等被func改一改f回不去main : 等callee return之後再load回来 : 这就是L1~L3跟L9~L11做的事情 : 而这边为什麽要存s0我们等等再讨论 :   : 存完stack之後就可以呼叫func了 : 注意此时f是caller、func是callee : 呼叫前应该要设定引数a0=a, a1=b : 但原本的a0, a1里面就已经分别是a, b了 : 所以这里就不再多设定一次 : 而L4那行move s0 a2是在做什麽的呢? : 呼叫callee前caller应该要把等等callee return後 : 还要用的a开头暂存器存起来(就是a2=c这个值) : 因为我们不知道func的运作 : (func可能还要再call其他函式会用到很多引数) : 照理来说存到stack是最简单的做法 : (sp-4之後store到stack中等return後再load回来) : 但这里用了另一个做法就是把a2暂存到s0之中 : 所以等callee return之後要用a2就直接去s0找即可 : 所以L4就是在把a2存到s0中 :   : 这就是为什麽刚刚L1~L3在存stack的时候L3要多存一个s0 : 因为main跟f之间是caller跟callee的关系 : 而f (callee)这个函式要用到s0这个暂存器 : 所以在开始前要负责把main (caller)的s0内容先存起来 : 同理,当L5呼叫func函式之後 : 如果func中有要用到s0这个暂存器 : 也要在func开始前把s0存到stack中 : (不过这就是func的事了跟我们现在在写f无关) :   : 了解L4之後应该就海阔天空了 : L5跳到func去执行函式return之後 : 回传值又要当作引数再呼叫一次func : L6, L7就是在做呼叫前的引数设定 : L7这里就用到刚刚被我们存到s0的a2=c : L8这里一样引数设定完跳到func去执行函式 不好意思挖一下sky大大曾经回答过的古文来再问一下 move $s0, $a2 --->这边是储存a2这里面的引数,这个我了解了 但是为什麽$a0 $a1这两个暂存器的引数不用存起来呢? 就像sky大说的,我们不知道func这个函数是做什麽的,既然如此call func(a,b)之前身为c aller不是应该也要把这两个引数存起来吗? 谢谢! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.140.157.62 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1563155932.A.9A1.html
1F:推 skyHuan: ax是用来存引数给呼叫的函式用的,通常一进到函式就会被 07/15 14:23
2F:→ skyHuan: 使用。而tx是用来存运算过程中暂时的结果,通常没有保留 07/15 14:23
3F:→ skyHuan: 的必要,所以呼叫callee的时候不会特别让callee去存他, 07/15 14:23
4F:→ skyHuan: 如果caller本身在return之後有使用需求,就要在呼叫函式 07/15 14:23
5F:→ skyHuan: 前自己先存好,return回来之後才有办法使用。这个例子a0, 07/15 14:23
6F:→ skyHuan: a1已经使用完不会再用了但a2还没,所以才先存起来return 07/15 14:23
7F:→ skyHuan: 後才有办法使用他 07/15 14:23
8F:→ mistel: 所以你的意思是,从这题来看因为a0,a1的引数在呼叫funct 07/15 14:58
9F:→ mistel: 时就已经用掉且之後不会再用了,所以不用存起来看,但a2 07/15 14:58
10F:→ mistel: 在return後因为我之後还要用且不知道funct的功能是什麽所 07/15 14:58
11F:→ mistel: 以我要把他存起来,这样子对吗? 07/15 14:58
12F:→ jls16457: 我觉得不是这个意思欸,应该是说a,b还要继续作为argumen 07/15 21:37
13F:→ jls16457: ts被使用,所以不用存到saved去,但是c因为不会用到,而 07/15 21:37
14F:→ jls16457: 且不确定a3会不会被funct用掉,所以才把a3的内容存到s0 07/15 21:37
15F:→ jls16457: 让funct把他存到stack里 07/15 21:37
16F:→ mistel: 我觉得我应该是对的耶,因为caller确定c之後会被使用到, 07/16 00:46
17F:→ mistel: 但是a,b丢给funct後就已经不会用到了,所以caller就不再 07/16 00:46
18F:→ mistel: 特地存下a,b 07/16 00:47
19F:→ mistel: 我的意思是caller在第一轮呼叫funct的时候确定不会用到c 07/16 00:50
20F:→ mistel: 但之後会用到,又不确定funct功能,所以存下来,但a,b再 07/16 00:50
21F:→ mistel: 第一次呼叫後就不会用到了,所以不存 07/16 00:50
22F:→ mistel: 「如果caller在return之後还会用$ax的值,那caller就要自 07/16 00:52
23F:→ mistel: 己存下来」 这句话是关键 07/16 00:52
24F:推 skyHuan: 对喔m大说的是对的~ 07/16 02:10
25F:→ mistel: 感谢sky大! 07/16 13:47







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP