汇编_ret_retf_call指令使用说明
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编_ret_retf_call指令使用说明相关的知识,希望对你有一定的参考价值。
ret指令
用法:
ret
意义:
将栈中的数据放入IP寄存器
伪码描述:
( ( s s ) ∗ 16 + s p ) − > ( I P ) ((ss)*16+sp)->(IP) ((ss)∗16+sp)−>(IP)
( s p ) + = 2 (sp) += 2 (sp)+=2
试验代码:
assume cs:codesg
stack segment
db 16 dup (0)
stack ends
codesg segment
mov ax,4c00h
int 21h
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0
push ax
mov bx, 0
ret
codesg ends
end start
试验结果:
retf指令
用法:
retf
意义:
将栈中的2字节数据先放入IP寄存器,再将栈中的2字节数据放入CS寄存器。
伪码描述:
( ( s s ) ∗ 16 + s p ) − > ( I P ) ((ss)*16+sp)->(IP) ((ss)∗16+sp)−>(IP)
( s p ) + = 2 (sp) += 2 (sp)+=2
( ( s s ) ∗ 16 + s p ) − > ( C S ) ((ss)*16+sp)->(CS) ((ss)∗16+sp)−>(CS)
( s p ) + = 2 (sp) += 2 (sp)+=2
试验代码:
assume cs:codesg
stack segment
db 16 dup (0)
stack ends
codesg 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
codesg ends
end start
试验结果:
call指令
用法:
call 标识地址
意义:
将当前IP的值压入栈,然后将IP+偏移进行跳转。
伪码描述:
( s p ) − = 2 (sp) -= 2 (sp)−=2
( I P ) − > ( ( s s ) ∗ 16 + s p ) (IP)->((ss)*16+sp) (IP)−>((ss)∗16+sp)
( I P ) + = 标 识 地 址 − 当 前 地 址 (IP)+=标识地址-当前地址 (IP)+=标识地址−当前地址
试验代码:
assume cs:codesg
stack segment
db 16 dup (0)
stack ends
codesg segment
mov ax,4c00h
int 21h
s: mov bx, 0
ret
start:
mov ax,stack
mov ss,ax
mov sp,16
call s
mov ax, 4c00h
int 21h
codesg ends
end start
试验结果:
以上是关于汇编_ret_retf_call指令使用说明的主要内容,如果未能解决你的问题,请参考以下文章