彙編call 命令 解析

2025-03-03 13:25:08 字數 4490 閱讀 7683

1樓:甲禧檢和

貌似call只有原位址入棧,就是call指令佔的位址,因為如果這個纖含桐位址不入棧的話call呼叫的子程式返回時會找不到返回的位址,你隨便反彙編乙個程式,單步步入call,會發現堆疊暫存器只減毀坦了4,就是乙個dword型別的32位的位址啦~~~

我跟過很多次老差了=

2樓:廣琦浮雅琴

不同的cpu可能有不同的規定。下面只說常見的簡單cpu的指令。

常見的cpu的call指令(「呼叫」指令)的功能,就是以下兩點:

1)將下一條指令的所在拍亂位址(即當時程式計數器pc的內容)入棧,2)並將子程式的起始位址送入pc(於是cpu的下一條指令就會轉去執行子程式)。

而子程式結尾處通常都要編寫一條ret指令(「返回」指令),ret指令的功能就是一條:

從棧中取出一條資料送入pc。

因此,ret指令後,cpu的下一條指令就回去執行當初的call指令的下一條了。

至於其他操作,如sweetsugar123兄所說的「保護暫存器現場」等等,一般並非call指令的功能,而是需要程式設計師自行在子程式內編寫程式實現的。這些伏讓操作通常也需要用到堆疊。基於堆襲廳檔棧的「後進先出」性質,這些操作可以不干擾call和ret指令的「儲存返回位址」的功能。

3樓:匿名使用者

call word ptr ?[是段內呼叫抄,只是先把當前指令的下一條bai指令的ip壓棧du,然後將?[?下的zhi

內容給ip,然後繼dao續執行。 在壓棧時是sp=sp-2,ss:[sp]=壓棧的ip值。

call dword ptr ?[是段間呼叫,只是先把當前的cs壓棧,然後將指令的下一條指令的ip壓棧,然後將?

]下的內容給ip, ?

2]的內容給cs,然後繼續執行。 這裡是sp=sp-2;ss:[sp]=壓棧的cs,然後sp=sp-2;ss:

sp]=壓棧的ip. 希望對你有用。

4樓:網友

call指令是用於呼叫子程式時用到的,這個確實是組合語言中嚐嚐遇到的問題,但內一條call指令來講,就要將call指令下容面一條指令的位址壓入棧,因為子程式執行完後我們要返回主程式啊,就是用的這條壓入棧中得位址,還有就是子程式中牽涉到保護現場時也要將一些暫存器進行入棧操作,原因是怕子程式中得語句運用改變了主程式中暫存器的值,這就是保護現場,當然還有子程式中設計時用到的一些壓入棧命令也會要求入棧。關於這個問題要搞清楚最好找本組合語言的教材看看子程式章節中關於棧變化的內容講解,推薦楊文顯或者是王爽的教材,希望對你有所幫助。

5樓:

貌似call只有原。

bai位址入棧,du

就是call指令佔的位址zhi,因為如果這個位址不入棧的dao話call呼叫的子程式返回時版會找不到返回的位址,權 你隨便反彙編乙個程式,單步步入call,會發現堆疊暫存器只減了4,就是乙個dword型別的32位的位址啦~~~我跟過很多次了= =

6樓:網友

入棧的是call命令後面的那條指令的位址。

7樓:網友

進去來找自。

彙編bai課件du

很zhi好的dao

8樓:冀康旋莫

call指令是用於呼叫子程式時用到的。

彙編call的問題

9樓:網友

這個問題我剛學習彙編的時候也是搞不清楚,下面我慢慢給你解釋:

首先,你要明確有關cs:ip 的一些問題:1.

cs:ip儲存的是**的位址,這個位址指向即將執行的**。2.

那麼cs:ip在什麼時候指向即將執行的**呢?舉例如下:

mov ax,78h mov bx ,24h 當 mov ax,78h 指令被讀取之前,cs:ip 是指向它本省的,讀取之後,ip 的值自動增加,增加多少呢?答曰:

是指令mov ax,78h的長度,所以ip值自動增加後cs:ip指向下一條指令即:mov bx,值自動增加之後,才執行本條指令(mov ax,78h)。

3. 以你所說的例子進行分析:mov ax,0 call s inc ax s:

pop ax 一共四條指令。執行完 mov ax,0 cs:ip=1000:

3 讀取指令 call s 後,cs:ip=1000:6也就是 指向 inc ax 指令的。

接下來,具體說說call s 指令的執行過程:上面說過,讀取call s 指令後 cs:ip已經指向了 inc ax,可是我們現在不執行它,我們要跳轉去執行用「s」標記的 pop ax 指令!!!

於是call命令就先把當前執行的狀態,也就是cs:ip值先存起來,放進棧中,到用的時候,再取出來(這裡"取出來"可以理解為,恢復cs:ip的值,接著沒有執行的往下繼續執行!

那這存起來的cs:ip 是多少呢?

答曰:1000:6(指向 inc ax )所以這裡的call s 指令相當於 push ip jmp near ptr s 即:

把ip的值入棧,再跳轉去執行s標記的pop ax 指令。

最後 是pop ax 指令的執行,我們根據上面可以知道在此指令之前ip入棧,所以出棧的是ip,並且把這個ip儲存在ax 中,ip=6,所以ax=6。

補充:1.到底什麼是子程式的偏移量?

偏移量=call 指令即將跳轉至的子程式位址(子程式的第乙個位元組)減去 call 指令讀取後 cs:ip指向的指令,在這裡相當於s子程式的位址減去指令 inc ax 的位址。

命令還有一種形式:call far ptr 標號。

它相當於:push cs

push ip

jmp far ptr 標號。

中間的一些細節,說的不是太清楚,不懂得請繼續提問!呵呵。

10樓:網友

call就是呼叫乙個函式,偏移是那個函式的位址和當前位址的差值。

組合語言中的call是什麼意思

11樓:凌亂心扉

意思:指remote call、遊戲call,指一種注入外部exe程式從外部呼叫函式的技術。找call一般使用od等工具,而call的使用一般需要編寫複雜的彙編**。

call指令的用法。

1、call+標號。

這個指令是先將call+標號的下一條語句的ip放入棧中,然後使當前的ip+16位位移。

jmp有個指令格式是:jmp near ptr標號,這裡的call唯一這種jmp多的一步就是多了一次入棧操作;

call far ptr+標號。

jmp指令的:jmp far ptr標號,這種jmp的使用是在段間轉移的,這種call和jmp的區別就是多了兩次入棧的操作;

3、call+16位暫存器。

這個指令先將call的下一條指令的ip入棧,然後再以ax為ip的**處。

jmp指令:jmp+16位暫存器,這裡的call唯一比jmp多的一步就是多了一步入棧操作;

vb關鍵字(呼叫)

用於將程式的執行交給其他的**段,通常是乙個子例程,同時儲存必要的資訊,從而使被呼叫段執行完畢後返回到呼叫點繼續執行。

描述將控制權傳遞給sub過程或function過程。

語法[call]name[argumentlist]

call語句語法有以下部分:

部分描述。call可選關鍵字。如果指定此關鍵字,則必須用括號把argumentlist括起來。例如:

call myproc(0)

name必選。要呼叫的過程名。

argumentlist可選。傳遞給過程的變數、陣列或表示式列表,用逗號分隔每一項。

說明在呼叫過程時,不必使用call關鍵字。然而,如果使用call關鍵字呼叫要求引數的過程,則必須用括號將argumentlist括起來。如果省略call關鍵字,那麼必須也同時省略argumentlist引數兩邊的括號。

使用call語法呼叫內部函式或使用使用者自定義函式,函式返回值都會被放棄。

12樓:dream毒

call(lcall)指令執行時,進行兩步操作: (1)將程式當前執行的位置ip壓入堆疊中; (2)轉移到呼叫的子程式。

13樓:網友

call指令 call(lcall)指令執行時,進行兩步操作: (1)將程式當前執行的位置ip壓入堆回棧中; (2)轉移到調答用的子程式。 (call近呼叫,lcall遠呼叫, call 定址2k空間範圍 lcall 定址64k空間範圍) call與ret結合使用,當call呼叫的子程式執行到ret命令時,壓入堆疊的ip彈出,跳出子程式,開始執行call的下一條語句。

例: main: setb ; lcall delay; clr ; lcall delay; ajmp main; delay:

mov r7,#250; d1: mov r6,#250; d2: djnz r6,d2; djnz r7,d1; ret ; end; 當執行lcall時,把該語句的ip(或者說pc)壓入堆疊,開始進入子程式delay,當執行到ret時,堆疊中的ip出棧,lcall的繼續執行下一條語句。

一般來說,執行一條call指令相當於執行一條push指令加一條jmp指令。

asp裡call的用法,asp裡call的用法

那是定義了 function函式 call functionname 這裡面的是引數 call 語句 描述將控制權傳遞給 sub 或 function 過程。語法 call name argumentlist call 語句語法有以下部分 部分 描述 call 可選項關鍵字。如果指定此關鍵字,則必須...

callao是哪個國家,callo是哪個國家的港口?

一 卡亞俄 callao 是秘魯第二大城市利馬 卡亞俄大都市區的一部分 年由西班牙人興建,成為殖民者掠奪金銀財富的起運港。年被 海嘯所毀,後在其附近重建。秘魯獨立後年才從殖民者手中奪回。二 卡亞俄 callao 位於卡亞俄灣內,裡馬克河口南岸。外有聖洛倫索島 長岬屏障,並有防波州鋒堤保護,為優良海港...

王一博經典手勢為戰隊打call,他的戰隊實力有多強?

他戰隊裡面的人基本上都是世界頂級的人才,所以這雹備個戰隊實力確實挺強的,我也枝肆族非常期待這個猛弊戰隊後續會帶來怎樣的表現。王一博的戰隊實力真的非常的強悍,而且王一博戰隊每次都是會獲得乙個第名的成績,特別的厲害。是非常強的,每位舞者都是非常優秀的,有著屬於個人的特點,所以戰隊的實力獲得了優異的成績。...