返回值该保存在哪里?

mingzi520 2009-06-08 02:51:19
如果某个子过程返回一个值,可以用ax保存,如果这个返回值大于16位(8086),用ax和dx保存

问题
我觉得子过程在返回时不应该改变寄存器的值,比如在子过程开始要把所用到的寄存器push到栈中,返回时要pop复原,而用ax保存返回值,这样就违背了这条规则,矛盾呀!
...全文
220 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingzi520 2009-06-10
  • 打赏
  • 举报
回复
个位太热心了,谢了
xd217 2009-06-09
  • 打赏
  • 举报
回复
就定义个空内存(随便多大都可以)来放这些中间结果,如果内存不够,可以转到硬盘上(就是把硬盘当虚拟内存来用),这个就是。。。。。。我在网上学的,不知道对不,我没实践过,很惭愧。。
BAYNPU 2009-06-09
  • 打赏
  • 举报
回复
0、程序中使用N条PUSH指令,返回时也同样使用N条POP指令,否则造成堆栈不平衡.

子过程在返回后,用到寄存器的值应该不变才是!可ax用返回值改变了原来的值.
1、MOV AX,1234
PUSH AX;压椎前保护AX的值.
.... ;中间随便给AX赋给都可以.
POP AX;出椎后还原1234.
yuchsh 2009-06-09
  • 打赏
  • 举报
回复
好好读读INTEL 编程手册
array020 2009-06-08
  • 打赏
  • 举报
回复
AX,你自己定义的话随便哪个都可以,呵呵
mingzi520 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jxc25 的回复:]
ax是累加器,dx是累加器扩展
都不是寄存器,没有矛盾
[/Quote]

"都不是寄存器" 什么意思?


只要瞻前顾后,哪里放返回值都一样,上面我说的是人们习惯性地:习惯的把返回值放到ax中,习惯先Push子过程要用到的寄存器的值,然后在返回前pop,还原寄存器,但这两个习惯产生冲突呀,子过程在返回后,用到寄存器的值应该不变才是!可ax用返回值改变了原来的值.


是不是我学到太死了,也许ax始终应该起临时保存作用.应该遵循的原则是:让任何过程改变他,而不影响程序
goodider 2009-06-08
  • 打赏
  • 举报
回复
可以用的。也可以像2楼说的方法。
既然楼主说的把开始的数据先入栈了。其实就是保存了AX的值。
wudi626 2009-06-08
  • 打赏
  • 举报
回复
也应该可以在数据段定义一个变量:

buf db ? ; 来存放你需要返回的值
jxc25 2009-06-08
  • 打赏
  • 举报
回复
ax是累加器,dx是累加器扩展
都不是寄存器,没有矛盾

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧