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

 我来答
匿名用户
2013-06-23
展开全部
设有下面一段子程序:
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式