主题:子程序的调用和返回是不是必须用到堆栈??(空)
wbsun111
[专家分:320] 发布于 2006-06-08 10:57:00
见主题
回复列表 (共7个回复)
沙发
NGW [专家分:770] 发布于 2006-06-08 11:28:00
要用堆栈保存CS,IP,标志位啦等等
板凳
名无 [专家分:80] 发布于 2006-06-09 01:32:00
一般是near 调用,不用保存cs,ip,只需把子程序中用到的寄存器ax,bx 之类的推倒堆栈中,返回之前,在弹出即可
方便的方法可这样
aaa proc uses ax bx ……
……
ret
aaa endp
3 楼
qiuyishuaige [专家分:150] 发布于 2006-06-09 20:58:00
用于回复现场 ,因为返回子程序后 寄存器里的值与调用子程序之前不同
4 楼
stefaniesyz [专家分:80] 发布于 2006-06-09 21:43:00
必须要有堆栈,因为要保存现场,当是near时只保存ip, far还需要保存cs,不过总是ip在上面,另外还可以保存一些数据用来进行参数的传递等等.
5 楼
llydd [专家分:200] 发布于 2006-06-10 00:18:00
如果我没有定义堆栈段,那么默认的堆栈段是多大?
6 楼
chenzep [专家分:3640] 发布于 2006-06-10 11:19:00
如果没有定义堆栈,系统会自动分配,不同的系统可能有不同的分配原则。
在XP下,系统的分配方法是:SS=DS,SP=0.
7 楼
qiuyishuaige [专家分:150] 发布于 2006-06-10 11:33:00
楼上大哥 ,
你的意思是说 堆栈默认大小和数据段一样大??
我来回复