汇编语言调用子程序前为什么要push ax,之后再pop ax?

;代码段(主程序)movax,wvarmovcx,4;共4位十六进制数again:rolax,4pushaxcallhtoasc;调用子程序movah,2movdl,al... ;代码段(主程序)
mov ax,wvar
mov cx,4 ;共4位十六进制数
again: rol ax,4
push ax
call htoasc ;调用子程序
mov ah,2
mov dl,al
int 21h ;显示一个字符
pop ax
loop again
展开
 我来答
GUEL86
2012-06-24 · TA获得超过5857个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2840万
展开全部
push ax ; ax 的数据压入堆栈
pop ax ; 出栈 恢复 ax 数据
调用子程序前为了 保存 ax 的数据 不 受到影响,返回时 恢复原来的数据。
如果子程序不用到 ax 则可以 省去上述操作。
帐号已注销
2012-06-24 · TA获得超过3001个赞
知道大有可为答主
回答量:1338
采纳率:75%
帮助的人:1345万
展开全部
在调用子程序前,ax里有一个值,而且是有用的。
在调用子程序之后,要输出什么结果,有一句mov ah, 2,这里改变了ax里的值。当然,在调用子程序的过程中,可能也改变ax中的值了。
程序希望在调用子程序、打印结果之后,还要用原来的ax值,所以就在调用之前把ax的值存到栈中,之后又恢复ax原来的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NJGQZF
推荐于2017-09-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1347万
展开全部
在此段汇编语言程序中,虽然给出的程序不完全,但分析是将wvar这个数据以16进制字符方式从高位开始输出到屏幕上。
mov ax,wvar ;读取数据到AX
mov cx,4 ;设置循环次数,一个字共4位十六进制数
again: rol ax,4 ;循环左移4次,高4位到低4位,可能是子程序要求的
push ax ;将当前AX只压栈保护,因为下面要用到AX
call htoasc ;调用子程序进行ASCII码转换
mov ah,2 ;准备显示
mov dl,al ;显示刚转换的字符
int 21h ;显示一个字符
pop ax ;回复AX值,以便进行下一位字符转换
loop again ;循环4次,转换、显示4位16进制字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LLChina99
2012-06-24 · TA获得超过1483个赞
知道小有建树答主
回答量:574
采纳率:0%
帮助的人:538万
展开全部
堆栈的作用!
=============
假设程序结构如下,用到了AX
-----------------
主程序代码1【假设AX=5】
调用子程序【假设子程序用到了AX,且使的AX=7】
主程序代码2【AX=7,不是5了】

子程序代码
=====================
使用push ax 保存Ax
使用pop ax 恢复AX
再看
-------------------------
主程序代码1【假设AX=5】
调用子程序【先保存AX,用到了AX,且使的AX=7,但恢复AX,AX=5】
主程序代码2【AX=5】

子程序代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Kiss丿阿狸
2012-06-24
知道答主
回答量:17
采纳率:0%
帮助的人:4.9万
展开全部
想要知道 去百度一下吧 (*^__^*) 嘻嘻……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式