看板 ASM 關於我們 聯絡資訊
※ 引述《allstarschh (allstars)》之銘言: : man了一下 : dont keep the frame pointer in a register for functions : that dont need one : 我要問 : frame pointer是不是就是指ebp?? : 還有frame pointer 跟stack pointer不是都會存在register裡嗎? : 如果不在register那就是在memory裡嘍~ : 這樣存取的速度不就變慢了? : 而且在memory 是不是pointer就可以把他的value改掉了嗎? : 什麼樣的function可以不需要frame pointer在register裡呢?? : 感謝 正常 function push ebp mov ebp, esp mov eax, [ebp+08h] ; param mov esp, ebp ; leave pop ebp ; ret 那 omit-frame-pointer mov eax, [esp+04h] ; param ret 就這樣子而已 但是呢這不是萬能的 遇到SSE運算 還是得用正常的 不然做不出 stack alignment 16 的東西 再來就是opcode長度 esp會比ebp多一個bytes 另外就是存取速度問題 因為esp時常變動 會比ebp固定來的效率差一點 這通常只是為了多一個register的作法 IA32大家都知道register通用的才6個 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.9.49 ※ 編輯: wowtiger 來自: 125.225.9.49 (12/19 08:34)
bobhsiao:推一下 原來是這個意思 12/19 23:21
MPU:感謝強者回答 03/28 15:10