永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-11-26 16:34
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-11-26 00:38
汇编语言调用子程序前为什么要push ax,之后再pop ax?
最佳答案
  • 五星知识达人网友:夜风逐马
  • 2021-11-26 01:05
在此段汇编语言程序中,虽然给出的程序不完全,但分析是将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进制字符
全部回答
  • 1楼网友:七十二街
  • 2021-11-26 04:49
堆栈的作用!
=============
假设程序结构如下,用到了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】

子程序代码
  • 2楼网友:痴妹与他
  • 2021-11-26 04:10
在调用子程序前,ax里有一个值,而且是有用的。
在调用子程序之后,要输出什么结果,有一句mov ah, 2,这里改变了ax里的值。当然,在调用子程序的过程中,可能也改变ax中的值了。
程序希望在调用子程序、打印结果之后,还要用原来的ax值,所以就在调用之前把ax的值存到栈中,之后又恢复ax原来的值。
  • 3楼网友:思契十里
  • 2021-11-26 03:11
想要知道 去百度一下吧 (*^__^*) 嘻嘻……
  • 4楼网友:神鬼未生
  • 2021-11-26 01:49
push ax ; ax 的数据压入堆栈
pop ax ; 出栈 恢复 ax 数据
调用子程序前为了 保存 ax 的数据 不 受到影响,返回时 恢复原来的数据。
如果子程序不用到 ax 则可以 省去上述操作。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯