对int、iret和栈的深入理解
来源:互联网 发布:淘宝买家订单导出工具 编辑:程序博客网 时间:2024/05/17 04:14
我们以一个程序来展开讨论:用7ch中断例程完成loop指令的功能,在屏幕中间显示80个"!"
1.程序框架如下
assume cs:codecode segmentstart:mov ax,0b800h;向8086CPU显存的地址mov di,160*12;显示位置mov bx,offset s-offset se;跳转的位移mov cx,80;循环次数s:mov byte ptr es:[di],'!'add di,2int 7ch;进入中断处理程序se:nopmov ax,4c00hint 21hcode endsend start
2.中断处理程序的功能如下:
1)dec cx
2)如果(cx)!=0,转到标号s处执行,否则向下执行
那么如何实现到目的地址s的转移?
1)转移到s显然应设(CS)=s的段地址,(IP)=s的偏移地址
2)那么中断程序如何得到s的段地址和偏移地址?
3)现在知道,可以从栈中直接和间接获得s的段地址和偏移地址,那么如何用他们设置CS:IP?
7c的中断程序如下:
lp:push bpmov bp,spdec cxjcxz lpretadd [bp+2],bxlpret:pop bpiret
这里跟高级语言里面函数调用栈帧很相似,后面我会专门更新一篇介绍函数调用栈帧的文章。
0 0
- 对int、iret和栈的深入理解
- 对ConcurrentHashMap的深入理解和学习
- iRet和iRetCode导致的bug
- 解决滑动冲突和自定义控件中对onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法的理解
- 对Session的深入理解
- 对sizeof()的深入理解
- 对`timescale的深入理解
- 对范式的深入理解
- 对的Volatile深入理解
- 对parseInt的深入理解
- 对多线程的深入理解
- 对String的深入理解
- 对this 的深入理解
- 对margin的深入理解
- 对C语言输入输出流和缓冲区的深入理解
- 对java中的接口和实现类的深入理解
- 对Unity资源和对象的深入理解
- iret
- QTTabBar v512 beta 5
- 大数据应用程序最佳选择:是SQL还是NoSQL
- SQL查找删除重复行
- 视频跟踪的研究
- Tab Controls 的使用
- 对int、iret和栈的深入理解
- jstl标签的用法(一)
- jstl标签的用法(二)
- c#基础笔记
- iOS Foundation 框架概述文档:常量、数据类型、框架、函数、发布声明
- 关于一建挂靠问题的解答
- wordpress友情链接如何添加Nofollow标签
- DF标志和串移动指令(movsb/movsw)
- VS2010 MSDN Help Library文档位置、错误、重新安装及安装注意事项