彙編之函式 堆疊傳參

2022-06-14 10:21:08 字數 951 閱讀 6080

函式就是一系列指令的集合,為了完成某個會重複使用的特定功能。

比如:mov eax,1 mov ecx,1 就相當於乙個函式(指令的集合)

(1)使用jmp來執行函式

(2)使用call來執行函式

以四條指令向普通暫存器儲存值為例:

call執行前:

call執行後(f8):

可以看到call指令把當前指令的下一條指令推入棧中,在執行完四條指令後,retn回到了當前指令的下一條指令。執行順序並沒有改變。

彙編中eax通常用來儲存函式的返回值的。

實現乙個簡單的加法函式:

方法如下:

(1)定義三條指令:

(2)呼叫函式:

f8逐步執行結果:

eax中儲存的就是相加的結果

當引數過多,暫存器不夠用可以使用堆疊傳參:

以乙個累加的函式為例:

(1)再call函式之前,先向堆疊中push5個數:

(2)執行前先將eax中的值清零

(3)f7逐步執行結果:

彙編中的堆疊傳參

這個堆疊傳參,就好比你想吃糖,可是你左邊的口袋裡已經裝滿了瓜子,所以你只能,先把糖放入右邊口袋,當你需要吃糖的時候。在從右邊口袋裡把糖取出來,就這麼簡單,這就是堆疊傳參,左邊口袋是通用暫存器,右邊口袋就是堆疊。糖果就是引數,向口袋放糖和從口袋拿糖就是呼叫堆疊,吃糖這個動作就是執行程式。當我們在執行函...

python函式之 傳參

數學定義 y f x y是x的函式,x是自變數。y f x0,x1,x2,xn python函式定義與作用def 函式名 引數列表 函式體 塊 return 返回值 deffn x,y sumnumber x y return sumnumber函式引數 函式在定義時要約定好形式引數,呼叫時也提供足...

彙編之堆疊

當我們看了暫存器的詳解後,及了解算術中的變數,下面我們來看一下,在8086cpu中一些計算法則規則的講解。先來看一下記憶體中字的儲存 傳送。字儲存 cpu中,用16位暫存器來儲存乙個字。高8位存放高位位元組,低8位存放低位位元組。由於記憶體單元是以位元組單位,則乙個字需要兩個連續的記憶體單元來存放。...