組合語言 CALL 和RET指令

2021-09-25 12:55:25 字數 1074 閱讀 2811

call和ret指令都是轉移指令,它們都修改ip,但同時修改cs和ip。

ret指令用棧中的資料,修改ip的內容,從而實現近轉移。

retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移。

cpu執行ret指令時,進行下面兩步操作:

(ip)=((ss)*16+(sp))

(sp)=(sp)+2

cpu執行retf指令時,進行下面4步操作:

(ip)=((ss)*16+(sp))

(sp)=(sp)+2

(cs)=((ss)*16+(sp))

(sp)=(sp)+2

用彙編語法來解釋ret和retf指令,則:

cpu執行ret指令時,相當於進行:

pop ip

cpu執行retf指令時,相當於進行:

pop ip

pop cs

cpu執行call指令時,進行兩部操作:

將當前的ip或cs和ip壓入棧中;

轉移。call指令不能實現短轉移,實現轉移的方法和jmp指令的原理相同。

call 標號(將當前的ip壓棧後,轉到標號處執行指令)

cpu執行call指令時,進行下面操作:

(sp)=(sp)-2

((ss)*16+(sp))=ip

(ip)=(ip)+16位位移

cpu執行call 標號時,相當於執行;

push ip

jmp near ptr 標號

call指令,其對應的機器指令並沒有轉移的目的位址,而是相對於當前ip的轉移位移。

call far ptr 標號 實現的是段間轉移

cpu執行時,相當於:

push cs 

push ip

jmp far ptr 標號

指令格式: call 16位reg

push ip

jmp 16位reg

轉移位址在記憶體中的call指令有兩種格式。

push ip

jmp word ptr 記憶體單元位址

push cs

push ip

jmp dword ptr 記憶體單元位址

組合語言 call和ret指令

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

組合語言之call和ret指令

ret指令用棧中的資料,修改ip的內容,從而實現近轉移 retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移 cpu在執行ret指令時,進行下面兩步操作 ip ss 16 sp sp sp 2使用組合語言表示就是 pop ipassume cs code stack segment db ...

《學習筆記》王爽組合語言 CALL和RET指令

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