組合語言之call和ret指令

2021-09-28 22:52:49 字數 1736 閱讀 7895

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

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

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

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

(sp) = (sp)+2

使用組合語言表示就是

pop ip
assume cs:code

stack segment

db 16 dup(0)

stack ends

code segment

mov ax,4c00h

int 21h

start: mov ax,stack

mov ss,ax

mov sp,16

mov ax,0

push cs

push ax

mov bx,0

retf

code ends

end start

cpu在執行retf指令時,進行下面兩步操作

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

(sp) = (sp)+2

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

(sp) = (sp)+2

使用組合語言表示就是

pop ip

pop cs

call指令

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

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

轉移

1) call 標識,

(sp) = (sp) -2

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

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

使用匯表示位

push ip

jmp near ptr 標識

2) call far ptr 標識;實現段間轉移

(sp) = (sp) -2

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

(sp) = (sp) -2

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

(cs) = 標識所在段的位址

(ip) = 標識所在段中的偏移位址

使用彙編表示為

push cs

push ip

jmp far ptr 標識

3)call 16位reg

(sp) = (sp) - 2

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

(ip) = (16位reg)

彙編表示:

push ip

jmp 16位reg

call和ret配合使用
assume cs:code

code segment

start: mov ax,1

mov cx,3

call s

mov bx,ax

mov ax,4c00h

int 21h

s: add ax,ax

loop s

retcode ends

end start

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

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

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