码迷,mamicode.com
首页 > 其他好文 > 详细

汇编中利用堆栈进行现场保护与恢复

时间:2014-12-07 21:48:01      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:代码   程序   br   ca   内存   情况   初始化   c   汇编   

设有下面一段子程序:
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

汇编中利用堆栈进行现场保护与恢复

标签:代码   程序   br   ca   内存   情况   初始化   c   汇编   

原文地址:http://blog.csdn.net/hutao1101175783/article/details/41790363

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!