call和ret指令用法
来源:互联网 发布:unity3d spine 编辑:程序博客网 时间:2024/04/29 01:19
call和ret都是转移指令,它们都可以修改IP或者同时修改CS:IP,它们被共同用来实现子程序的设计
ret和retf区别
ret是用栈中的数据修改IP的值,实现近转移(段内转移)
retf是用栈中的数据修改cs:IP的值,实现远转移(段间转移)
1cpu执行ret时,执行以下操作
(IP)=((ss)*16+(sp)) (sp)=(sp)+2
相当于pop ip
2cpu执行retf时,执行以下操作
(IP)=((ss)*16+(sp)) (sp)=(sp)+2
(CS)=((ss)*16+(sp)) (sp)=(sp)+2
相当于POP IP和POP CS
call指令:cpu执行call时执行以下操作
1将当前IP或CS和IP压入栈中,PUSH IP 或者 PUSH IP PUSH CS
2转移(jmp)
call不能实现段内短转移(就是jmp short),除此之外,call实现转移方法和jmp原理相同
ccall 标号 功能:将当前IP压栈后,转到标号处执行
cpu执行call时,执行以下操作、
1 (sp)=(sp)-2 ((ss)*16+(sp))=(ip)
相当于 push ip
2(IP)=(IP)+16位位移
相当于jmp near ptr 标号
注意:压栈的IP是call指令的下一条指令(参考cpu执行指令的过程,指令放入缓冲区,cpu指向下一条指令)
实验如下程序证明:
assume cs:codecode segmentstart:mov ax,0 call S inc ax S:pop ax add ax,ax pop bx mov ax,4c00h int 12h code endsend start
程序如图:
pop ax时 ax的值是0006,ip=0006时是inc ax的指令
call far ptr 标号 功能:将当前CS和IP压栈
cpu执行这种格式的call指令时执行以下操作
1 (sp)=(sp)-2 ((ss)*16+(sp))=(cs)
相当于 push cs
(sp)=(sp)-2 ((ss)*16+(sp))=(ip)
相当于pus ip
2(cs)=标号所在的段地址(cs)(IP)=标号所在的偏移地址(IP)
相当于jmp far ptr 标号
call 16位寄存器 功能:将当前ip入栈,ip=16位寄存器
cpu执行这种格式的call指令时执行以下操作
1 (ip)=(sp)-2 ((ss)*16+(sp))=(ip)
相当于 puship
2 (ip)=(16位寄存器)
相当于jmp 16位寄存器
call word ptr 内存单元地址
汇编解释:1 push ip 2 jmp word ptr 内存单元地址(ip=内存单元的数据)
calldword ptr 内存单元地址
汇编解释:1 push cspush ip2jmp dword ptr 内存单元地址(cs=内存单元高位的数据 ip=内存单元低位的数据)内存单元地址cs放在高位地址,ip放在地位地址
一个具有一定功能的程序段为子程序(函数),在需要的时候用call执行,用ret返回,call对应ret
实现程序如下:
assume cd:codedata segmentdb 'ILoveProgramming'data endscode segment start:mov ax,datamov ds,axmov si,0;用si指向数据的首地址mov cx,16;数据长度16call capital ;调用转换字符大小的子程序mov ax,4c00hint 21hcapital:and byte ptr [si],11011111binc siloop capitalret;循环结束后回到call指令的下一条指令继续执行code endsend start
- call和ret指令用法
- CALL和RET指令
- call和ret指令
- call 和 ret 指令
- CALL和RET指令
- call指令和ret指令
- 汇编语言--call和ret指令
- 汇编--9 call指令和ret指令
- call指令和ret指令(1001)
- call和ret指令(8086)
- 汇编学习笔记--CALL和RET指令
- 8086汇编之 CALL 和 RET指令
- 第10章 CALL和RET 指令
- 汇编语言笔记10-CALL和RET指令
- 汇编第十节-CALL和RET指令
- Call指令与ret指令
- Call指令与ret指令
- 第10章 CALL和RET指令 笔记
- 远程登录无图形界面linux安装matlab2016b
- poj-2480(数论+积性函数性质)
- 算法学习之递归--N皇后问题
- TableLayout和侧滑窗
- 【拜小白opencv】17-使用VideoCapture类读取播放视频操作--简洁版
- call和ret指令用法
- Tcp协议保证可靠传输机制
- 机器学习实战1:K近邻算法(KNN)
- 给定一个字符串S,求所有长度小于等于3的子串出现的次数,输出结果按出现次数从大到小
- Could not create connection to database server. Attempted reconnect 3 times. Giving up.
- 利用JDBC如何连接ORACLE数据库
- hdu6148 数位dp
- 剑指Offer [05] 用两个栈实现队列
- 对ORM对象关系映射的理解