ret指令用棧中的資料,修改ip的內容,從而實現近轉移
retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移
cpu在執行ret指令時,進行下面兩步操作
使用組合語言表示就是(ip) = ((ss)*16 +(sp)
(sp) = (sp)+2
pop ip
cpu在執行retf指令時,進行下面兩步操作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
使用組合語言表示就是(ip) = ((ss)*16 +(sp)
(sp) = (sp)+2
(cs) = ((ss)*16 +(sp)
(sp) = (sp)+2
call指令pop ip
pop cs
cpu執行call指令時,進行下面兩步操作
1) call 標識,將當前的ip或者cs和ip壓入棧中
轉移
使用匯表示位(sp) = (sp) -2
((ss)*16 +(sp)) = (ip)
(ip) = (ip) + 16位位移
2) call far ptr 標識;實現段間轉移push ip
jmp near ptr 標識
使用彙編表示為(sp) = (sp) -2
((ss)*16 +(sp)) = (cs)
(sp) = (sp) -2
((ss)*16 +(sp)) = (ip)
(cs) = 標識所在段的位址
(ip) = 標識所在段中的偏移位址
3)call 16位regpush cs
push ip
jmp far ptr 標識
彙編表示:(sp) = (sp) - 2
((ss)*16 +(sp)) = (ip)
(ip) = (16位reg)
call和ret配合使用push ip
jmp 16位reg
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 ...