函式呼叫時call指令和ret指令

2021-09-10 02:52:57 字數 671 閱讀 9032

函式呼叫一般是通過

call

指令和ret指令相互配合使用來實現的,當函式執行到call指令時,call指令會做兩件事:1,將當前的ip壓入棧中;2,跳轉到call指令後被呼叫的函式。

當被呼叫函式執行完畢之後,通過

ret指令返回到函式中,ret指令也會做兩件事:1,將之前壓入棧中的ip出棧,2,跳轉到ip所指向的位址,函式開始執行call指令的下一步指令。

除此之外,

call

指令還有以下用法:

轉移位址在指令中的call指令,

call far ptr+標號,  

此時相當於

push cs

push ip

jmp far ptr 標號

轉移位址在暫存器中的call指令,

call 16位暫存器;

此時相當於

push ip

jmp 16位暫存器

轉移位址在記憶體中的call指令,

有兩種格式:

call word ptr + 記憶體單元位址;

相當於push ip

jmp word ptr 記憶體單元位址

call dword ptr + 記憶體單元位址;

相當於push cs

push ip

jmp dword ptr 記憶體單元位址

組合語言 CALL 和RET指令

call和ret指令都是轉移指令,它們都修改ip,但同時修改cs和ip。ret指令用棧中的資料,修改ip的內容,從而實現近轉移。retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移。cpu執行ret指令時,進行下面兩步操作 ip ss 16 sp sp sp 2 cpu執行retf指令時,...

編譯原理 CALL和RET指令(二)

call指令和ret指令的用法 call和ret指令 一 可以利用call和ret來實現子程式的機制,框架為 標號 指令 ret具有子程式的程式框架如下 assume cs code code segment main call sub1 mov ax,4c00h int 21h sub1 call...

組合語言 call和ret指令

call和ret指令都是轉移指令,它們都修改ip,或同時修改cs和ip。它們經常被共同用來實現子程式的設計。ret指令用棧中的資料,修改ip的內容,從而實現近轉移 retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移 cpu執行ret指令時,進行下面兩步操作 cpu執行retf指令時,進行...