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/m.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燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP