永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-11-26 16:34
汇编语言调用子程序前为什么要push ax,之后再pop ax?
最佳答案
在此段汇编语言程序中,虽然给出的程序不完全,但分析是将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进制字符
全部回答
堆栈的作用!
=============
假设程序结构如下,用到了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】

子程序代码
在调用子程序前,ax里有一个值,而且是有用的。
在调用子程序之后,要输出什么结果,有一句mov ah, 2,这里改变了ax里的值。当然,在调用子程序的过程中,可能也改变ax中的值了。
程序希望在调用子程序、打印结果之后,还要用原来的ax值,所以就在调用之前把ax的值存到栈中,之后又恢复ax原来的值。
想要知道 去百度一下吧 (*^__^*) 嘻嘻……
push ax ; ax 的数据压入堆栈
pop ax ; 出栈 恢复 ax 数据
调用子程序前为了 保存 ax 的数据 不 受到影响,返回时 恢复原来的数据。
如果子程序不用到 ax 则可以 省去上述操作。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
现在可以剪葡萄技了吗?知样剪,请老师解答
ios9.2.1卡,怎么回事情?
朱尔斯·霍夫曼的经历
帮忙给女生起个游戏名吧。
徐村老年体育协会地址在什么地方,想过去办事
齿轮左旋和右旋怎么判断
中国幼监 是个什么单位?工作职责?上级主管
沭阳琴香饭店猪蹄做法
1.按音色的不同,将人声分为哪三类? 2.《兰
鑫星台球厅地址在哪,我要去那里办事,
骆村(秦骆)老年协会地址有知道的么?有点事想
经纬仪竖直角测量 怎么测?
新铝壶煮的水怎么一直发白
高铁和普通火车工务段的工资哪个高
燚是什么意思,读音是什么?
推荐资讯
群众信访联合接待中心地址好找么,我有些事要
金万达板金喷漆厂地址在什么地方,想过去办事
成人高考大专证分全日制和非全日的吗
“空如此生,静如繁花”是什么意思?
岳飞什么爵位?多大官?
请问如果这题the number of 变成a number of
当女兵是不是特别不容易啊?
作文《送给最好的自己》
2x分之60o 45=x分之480解方程怎么算
安装帝国CMS模板:您的用户名、密码或安全答
成人压力很大吗?成人每天是怎么度过的?
二十袋面粉重一千后面单位填什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?