汇编中利用堆栈进行现场保护与恢复
来源:互联网 发布:js表单重置的方法 编辑:程序博客网 时间:2024/04/29 01:07
设有下面一段子程序:
mov ah,2
mov dl,13
int 21h
看了就知道上面这段程序是调用了int 21来输出十六进制13。
那么,如果主程序直接这样调用:
mov ax,1
mov dx,1
call 上面的代码
sub ax,1
sub dx,1
可以看出ax,dx初始化的时候就是1,那么虽然程序可以执行成功,但是,到call下面那句就不再是我们主程序所给出的值了,因为子程序也就是上面输出13的那段代码改变了ax和dx的值。
堆栈是内存中的一个特殊区域,可以先把ax和dx放到堆栈,然后再执行完子程序的时候再从堆栈中取出来那么ax和dx值就还是执行子程序前的情况了:(所以可以这样修改上面的那段主要代码段)
mov ax,1
mov dx,1
push ax;把ax放入堆栈
push dx;把dx放入堆栈
call 上面的代码;调用子程序
pop dx;取出堆栈
pop ax;取出堆栈
sub ax,1
sub dx,1
mov ah,2
mov dl,13
int 21h
看了就知道上面这段程序是调用了int 21来输出十六进制13。
那么,如果主程序直接这样调用:
mov ax,1
mov dx,1
call 上面的代码
sub ax,1
sub dx,1
可以看出ax,dx初始化的时候就是1,那么虽然程序可以执行成功,但是,到call下面那句就不再是我们主程序所给出的值了,因为子程序也就是上面输出13的那段代码改变了ax和dx的值。
堆栈是内存中的一个特殊区域,可以先把ax和dx放到堆栈,然后再执行完子程序的时候再从堆栈中取出来那么ax和dx值就还是执行子程序前的情况了:(所以可以这样修改上面的那段主要代码段)
mov ax,1
mov dx,1
push ax;把ax放入堆栈
push dx;把dx放入堆栈
call 上面的代码;调用子程序
pop dx;取出堆栈
pop ax;取出堆栈
sub ax,1
sub dx,1
1 0
- 汇编中利用堆栈进行现场保护与恢复
- 现场保护与恢复
- 51 汇编编程:中断的现场保护与恢复
- (三)ARM 常用汇编指令(2)之ARM堆栈保护/恢复现场分析
- Day4 旋转屏幕——现场保护与现场恢复
- 保护现场和恢复现场
- 汇编函数 哪些寄存器在使用时需要保护和恢复现场
- C++中利用析构机制正确保护现场
- 实验十(无 保护/恢复 现场)
- 如何进行aix下误删除LV的数据恢复问题(包含现场保护方案和数据恢复方案)
- 利用堆栈进行四则运算
- 利用yasm在vs2008中进行X86汇编与C/C++相互调用
- android框架与Activity生命周期、现场保护
- CentOS 7中利用Snapper快照进行系统备份与恢复
- CentOS 7中利用Snapper快照进行系统备份与恢复
- HTML中利用堆栈方式对Table进行行排序
- HTML中利用堆栈方式对Table进行行排序
- linux中利用互斥量对数据结构进行保护的源代码
- oracle字符集问题随笔
- ThreadLocal类及使用技巧
- SpringMVC的使用基础篇
- 【Java.NIO】
- 关系链的特点之读扩散和写扩散
- 汇编中利用堆栈进行现场保护与恢复
- 【HDU 5140】Hun Gui Wei Company(主席树)
- stlmap中upper_bound和 lower_bound的使用
- 经常遇到Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be e
- Java基础知识小结[3]
- 四十九日祭
- 实体框架集合
- 计算拨付资金剩余待拨付资金语句
- android高级编程学习笔记-ToDoList第一版