函式就是一系列指令的集合,為了完成某個會重複使用的特定功能。
比如: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位存放低位位元組。由於記憶體單元是以位元組單位,則乙個字需要兩個連續的記憶體單元來存放。...