
汇编语言调用子程序前为什么要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 展开
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 展开
5个回答
展开全部
push ax ; ax 的数据压入堆栈
pop ax ; 出栈 恢复 ax 数据
调用子程序前为了 保存 ax 的数据 不 受到影响,返回时 恢复原来的数据。
如果子程序不用到 ax 则可以 省去上述操作。
pop ax ; 出栈 恢复 ax 数据
调用子程序前为了 保存 ax 的数据 不 受到影响,返回时 恢复原来的数据。
如果子程序不用到 ax 则可以 省去上述操作。
展开全部
在调用子程序前,ax里有一个值,而且是有用的。
在调用子程序之后,要输出什么结果,有一句mov ah, 2,这里改变了ax里的值。当然,在调用子程序的过程中,可能也改变ax中的值了。
程序希望在调用子程序、打印结果之后,还要用原来的ax值,所以就在调用之前把ax的值存到栈中,之后又恢复ax原来的值。
在调用子程序之后,要输出什么结果,有一句mov ah, 2,这里改变了ax里的值。当然,在调用子程序的过程中,可能也改变ax中的值了。
程序希望在调用子程序、打印结果之后,还要用原来的ax值,所以就在调用之前把ax的值存到栈中,之后又恢复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进制字符
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
-----------------
主程序代码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】
子程序代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
想要知道 去百度一下吧 (*^__^*) 嘻嘻……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询