1. 程式人生 > >彙編函式 哪些暫存器在使用時需要保護和恢復現場

彙編函式 哪些暫存器在使用時需要保護和恢復現場

在寫彙編函式時,總感覺在哪些暫存器該保護哪些不需要保護的問題上比較模糊,要是保護所有使用到的暫存器感覺比較死板也不符合規則,所以就去網上搜了搜。找到了一些規則,我覺得這是一個規則問題,大家都遵守的話就可以相互複用函數了,當然這個規則也是有一定道理的。

1、你自己的函式在操作改變edi esi ebx ebp esp這幾個暫存器的值時,你必須先儲存這幾個暫存器原先的值,並在函式返回之前恢復上述這幾個暫存器原先的值。
2、你的函式在呼叫外部的函式時,edi esi ebx ebp esp這幾個暫存器不會被函式修改(因為在函式中會保護這些暫存器),所以在呼叫外部函式時你的函式不用進行儲存,但eax ecx edx這三個暫存器的值你的函式在呼叫外部函式前必須先儲存(因為函式中不會保護這三個暫存器)。

還有就是關於棧恢復的問題,就是在呼叫函式之前的引數入棧和恢復棧的問題,可以採用C中的規則:

後面的引數先入棧,由呼叫者恢復棧(恢復時可以簡單地使用add esp,num,其中num就是你入棧時的引數位元組數)

---------------------
作者:xiaominthere
來源:CSDN
原文:https://blog.csdn.net/xiaominthere/article/details/17486129
版權宣告:本文為博主原創文章,轉載請附上博文連結!