汇编_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指令使用说明的主要内容,如果未能解决你的问题,请参考以下文章

汇编 LEA 指令

汇编语言_实验二_用机器指令和汇编指令编程

汇编指令和编译器

BFD_RELOC_64:使用 C++ 在 32 位 linux 上编译汇编器指令

常用汇编指令集合

GCC内联汇编常见陷阱