[汇编语言]-第十章 ret,retf,call指令
1- ret 相当于 pop IP;用栈中数据,修改IP内容.从而实现近转移.
执行后(IP)=0, CS:IP指向代码段的第一条指令.
1 assume cs:code 2 stack segment 3 db 16 dup(0) 4 stack ends 5 code segment 6 mov ax,4c00h 7 int 21h 8 start: 9 mov ax,stack 10 mov ss,ax 11 mov sp,16 12 mov ax,0 13 push ax 14 mov bx,0 15 ret 16 code ends 17 end start
2- retf 相当于 pop IP; pop CS;用栈中数据修改CS,IP内容.从而实现远转移.
执行后 CS:IP指向代码段的第一条指令.
1 assume cs:code 2 stack segment 3 db 16 dup(0) 4 stack ends 5 code segment 6 mov ax,4c00h 7 int 21 8 start: 9 mov ax,stack 10 mov ss,ax 11 mov sp,16 12 mov ax,0 13 push cs 14 push ax 15 retf 16 code ends 17 end start
reference:
http://bbs.csdn.net/topics/340237304
3- 实现从内存1000:0000处开始执行指令
1 assume cs:code 2 stack segment 3 db 16 dup(0) 4 stack ends 5 code segment 6 mov ax,4c00h 7 int 21 8 start: 9 mov ax,stack 10 mov ss,ax 11 mov sp,16 12 mov ax,1000H 13 push ax 14 mov ax,0 15 push ax 16 retf 17 code ends 18 end start
4- call 标号 (将当前的IP压栈后,转到标号处执行指令)
push Ip
jmp near ptr 标号
1 assume cs:code 2 code segment 3 start: 4 mov ax,0 5 call s 6 inc ax 7 s: 8 pop ax 9 code ends 10 end start
ax=6
CPU指令执行的过程:
1- 从CS:IP指向的内存单元读取指令,读取的指令,进入指令缓冲器.
2- (IP) = (IP) + 所读取的指令长度, 从而指向下一条指令
3- 执行指令, 转到1, 重复这个过程
5- call far ptr 标号
push cs
push ip
jmp far ptr 标号
执行步骤分析:
CS:1000 IP:3 时 读取call far ptr s放入缓存, ip = IP + 5 = 8
push cs //1000
push ip //8
跳转到s执行
pop ax //ax = 8
add ax,ax // ax = 8 + 8 = 10 寄存器中存放的数为16进制
pop bx //bx = 1000
add ax,bx //ax = 1000 + 10 = 1010
最终结果 ax = 1010
6- call 16位寄存器
push IP
jmp 16位寄存器 // mov IP,16位寄存器; jmp IP
ax=000B
sp是栈顶地址,[bp]栈顶值为5
ax = 6 + 5 = B
reference:
http://bbs.csdn.net/topics/100016651
转载于:https://www.cnblogs.com/galoishelley/p/3788306.html
[汇编语言]-第十章 ret,retf,call指令相关推荐
- (十)汇编语言——CALL和RET指令
(十)汇编语言--CALL和RET指令 文章目录 (十)汇编语言--CALL和RET指令 CALL指令 功能 寄存器 内存 段间转移 返回指令 ret retf 实例 MUL指令 模块化程序设计 寄存 ...
- RET RETF IRET IRETD 指令的不同
文章目录 RET RETF (return far) IRET (interrupt return) IRETD 参考书籍 操作系统:32位,保护模式,非影子堆栈(Shadow-Stack) 填一下之 ...
- 汇编语言ret与call指令
文章目录 CALL和RET指令 ret和retf call指令 根据位移进行转移 转移目的地址在指令中 转移地址在寄存器中 转移地址在内存中 使用call和ret来编写子程序 CALL和RET指令 r ...
- [汇编语言]CALL和RET指令
目录 一.ret和retf 二.call指令 2.1 依据位移进行转移的call指令 2.2 转移的目的地址在指令中的call指令 2.3 转移地址在寄存器中的call指令 2.4 转移地址在内存中的 ...
- ret/retf/iret
ret/retf/iret (2011-03-10 23:10:27) http://blog.sina.com.cn/s/blog_67146a750100ra3l.html 转载▼ 标签: ret ...
- 【微机原理与接口技术学习实践】汇编语言程序设计初步——debug编写调试指令序列
halo~我是bay_Tong桐小白 本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言.指点 [微机原理与接口技术学习 ...
- Win-MASM64汇编语言-CALL/RET/RETF指令
CALL和RET都是转移指令,它们都会修改IP,或者同时修改CS和IP,两个指令配合使用用来实现子程序 一:RET与RETF RET 将栈中的数据,放到IP中,从而实现修改IP,达到近转移 RETF ...
- 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)
[0]写在前面 0.1)本代码旨在演示 从 ring0 转移到 ring3(即,从高特权级 转移到 低特权级) 0.2)本文 只对 与 门相关的 代码进行简要注释,言简意赅: 0.3)文末的个人总结是 ...
- 汇编语言 | CALL 和RET指令
call和ret指令都是转移指令,它们都修改IP,但同时修改CS和IP. 1.ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移. retf指令用栈中的数据,修改CS和IP的内容 ...
最新文章
- Java8新特性之stream的详细用法
- java atomicinteger_Java多线程进阶(十三)—— J.U.C之atomic框架:AtomicInteger
- 在Spring中使用DButils
- 拉屎能赚钱?在马桶上月入过万?原来卫生间里还有这么多隐藏福利,超模君都惊了……
- 华为Mate30和华为Mate30 Pro哪款实用?
- 特斯拉已在中国建立数据中心
- [渝粤教育] 广东-国家-开放大学 21秋期末考试土力学与地基基础10445k1
- 微信小程序 云函数 Date时间不对+8小时 设置北京时间
- cmd字体推荐-更纱黑体
- ASPICE总结2——软件详细设计与软件测试过程
- ubuntu apt-get安装或卸载软件时出现了python-minimal等错误问题的解决方法
- 30分钟简易复刻元气骑士地图生成系统
- linux xen 管理,ARM平台上运行Xen 可同时管理linux和VxWorks
- Acer S3 拆机换固态硬盘!【我的Acer S3小三,时尚时尚最时尚!】
- 【Unity开发小技巧】模型单指旋转双指缩放功能代码(多种情况)
- EC-PCA: 利润中心主数据维护流程
- 复爱合缘发布《白皮书》 传统恋爱仍是主流
- 【Chips】跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?
- 防水行业在vivo投放广告有效果吗?vivo广告开户全国代理商!
- 简化版的校园天翼使用路由
热门文章
- JZOJ 5701. 【gdoi2018 day2】第一题 谈笑风生(magic)
- oracle 数据库问题,ORACLE数据库常见问题汇总,oracle常见问题汇总
- 字符串拼接数字 java_使用JAVA代码实现字符串的简单拼接
- max复制关键帧到不同的文件_彭占元|如何排除PostgreSQL WAL 文件数量长期持续增加?...
- matlab优化应用
- 一篇演讲 By 浙江大学数学系主任刘克峰
- 破解xp(sp2)密码
- [CODEVS 3044] 矩形面积求并
- hdu5442(2015长春网络赛F题)
- hdu3697(贪心+暴力)