社区
汇编语言
帖子详情
返回值该保存在哪里?
mingzi520
2009-06-08 02:51:19
如果某个子过程返回一个值,可以用ax保存,如果这个返回值大于16位(8086),用ax和dx保存
问题
我觉得子过程在返回时不应该改变寄存器的值,比如在子过程开始要把所用到的寄存器push到栈中,返回时要pop复原,而用ax保存返回值,这样就违背了这条规则,矛盾呀!
...全文
283
9
打赏
收藏
返回值该保存在哪里?
如果某个子过程返回一个值,可以用ax保存,如果这个返回值大于16位(8086),用ax和dx保存 问题 我觉得子过程在返回时不应该改变寄存器的值,比如在子过程开始要把所用到的寄存器push到栈中,返回时要pop复原,而用ax保存返回值,这样就违背了这条规则,矛盾呀!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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是累加器扩展
都不是寄存器,没有矛盾
delphi 默认情况下参数及
返回值
的
保存
位置
====================================================== 注:本文源代码点此下载 ====================================================== delphi 默认情况下参数及
返回值
的
保存
位置 delphi 默认情况下参数
保存
的位置:函数的第一个参数
保存
在eax中,第二个参数
保存
在edx中
函数的
返回值
保存
在哪里
函数的
返回值
保存
在内存的什么区域呢? 1、结构体大小不超过4字节,那么仍然使用EAX寄存器传递
返回值
2.结构体超过4字节但不等于8字节时,调用者将首先在栈上分配一块能容纳结构体的临时内存块,然后在传递完函数参数后将该临时内存块的首地址作为隐含的第一个参数最后(因为压栈顺序是从右到左)压栈,接下的动作同前所述。当被调用函数返回时,它会通过第一个隐含参数寻址到临时内存块并将
返回值
拷贝到其中,然后将
保存
有
返回值
内容的临时内存块的首址存进eax寄存器中, 3、结构体大小刚好为8个字节时编译器不再于栈上分配内存,而
SpringMVC详解二、
返回值
与数据在域中的
保存
1、
返回值
的设置1.1、返回String1.2、返回modelAndView1.3、返回void2、数据在域中的
保存
2.1、Request对象中
保存
数据(不推荐)2.2、Session域中
保存
数据2.3、ServletContext域中
保存
数据2.4、Map或Model或ModelMap形式
保存
数据在request域中2.5、ModelAndView方式
保存
数据到request域中2.6、@Ses...
保存
SelectObject
返回值
的原因
在看nehe教程的时候,我发现在调用SelectObject函数的时候,作者将这个函数的
返回值
保存
在一个变量里: HFONT font,oldfont; oldfont = (HFONT)SelectObject(hDC, font); 不明白这样做的原因,到CSDN论坛上搜了下,找到一个不错的答案: 原帖如下: “两个作用 1.恢复原来的GDI 2.释放资源 CBi
函数调用详解(函数状态
保存
参数传递和
返回值
)
从汇编的角度理解程序 —— 函数调用 我们已经知道,程序是按顺序执行的指令流水线 (PipeLine)。分支和循环逻辑,可以通过在流水线中往后跳或往前跳实现。 其实,函数调用也不过是在跳转。调用某个函数,就跳转到那个函数的指令流的开始位置,函数执行完成后,再跳转回来。 函数能获取外部写入的数据(输入),能持有自己独特的数据(本地状态),还能向外部写数据(输出)。而理论上程序所拥有的函数数量是无限的...
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章