压入堆栈的时候,为什么只压DS和ES?
各位老大:
在这段程序中,为什么只压DS和ES?CS和SS不用压入吗,为什么啊?
_OSCtxSw proc far
pusha
push es
push ds
mov ax,seg _ostcbcur
mov ds,ax
.........
pop ds
pop es
popa
问题点数:100、回复次数:21Top
1 楼csdsjkk()回复于 2003-11-03 11:51:17 得分 10
在子程序里,
如果要使用(改变)某些寄存器,
而这些寄存器又要保持它们在主程序里的原值,
那么可以在使用(改变)它们前先把原值‘保护’起来,
一个简单的‘保护’方法就是:
push xx
用完后再
pop xx
恢复原值Top
2 楼bluedreammer(瀟瀟鳥)回复于 2003-11-03 12:57:11 得分 10
cs是代碼段寄存器,沒見過直接push cs,遠調用子程序的時候,自動把cs壓棧.
ss是堆棧段寄存器,一般也不會壓棧了.Top
3 楼dunkel(内心和夜 哪个黑)回复于 2003-11-04 14:07:47 得分 10
堆栈一般都是程序/进程共用的, 所以不需要进行 "保存/恢复" 的操作.
至于 cs, 虽然不是象 bluedreammer(瀟瀟鳥) 说的那样 "沒見過直接push cs", 不过不是为了保存 cs 的, 而往往是为了赋值给其他的段寄存器: push cs pop ds (cs->ds).
不需要对 cs 进行 "保存/恢复" 是由于执行转移指令对(int?/iret, call far/retf)本身就包含了 cs 的保存和恢复功能.Top
4 楼hswxf(黄山一刀)回复于 2003-11-04 21:23:07 得分 10
楼上说的偏激了些吧
应该是你说的与bluedreammer(瀟瀟鳥) 说的还有其它一些应用
这样才完整一些Top
5 楼qiume(好好回贴,天天胖胖)回复于 2003-11-05 18:11:53 得分 5
在过程调用用只需要保护那些可能受影响的寄存器Top
6 楼bluesky202348(恶魔猎人)回复于 2003-11-05 19:19:08 得分 5
既然那些寄存器在此程序中未用到,又何必要把他们寄存呢?Top
7 楼aabiao()回复于 2003-11-05 23:18:56 得分 5
压入/弹出只是手段
目的是保护
。。。Top
8 楼o1n(小毛子)回复于 2003-11-05 23:29:51 得分 5
只是你一般只见过push ds push es没见过别的,可并不表示没有这种情况!Top
9 楼W32API()回复于 2003-11-06 00:15:16 得分 5
比较同意 dunkel(内心和夜 哪个黑) 的观点Top
10 楼baobeixiong(宝贝熊)回复于 2003-11-06 17:40:52 得分 0
upTop
11 楼lovenoend(有容乃大)回复于 2003-11-06 18:39:14 得分 5
push ds push es
是为了保护数据段,
你用push cs push ss也可以,
但为了什么
Top
12 楼yinjintao(thinking in money)回复于 2003-11-06 20:40:44 得分 5
push ss有什么用?Top
13 楼litop(火龙)回复于 2003-11-07 15:05:54 得分 0
cs 和 ss不用保护吗?Top
14 楼yinjintao(thinking in money)回复于 2003-11-07 19:10:57 得分 5
cs不用,ss不太清楚...Top
15 楼W32API()回复于 2003-11-07 20:55:51 得分 5
SS,你只是写应用程序的话,那我看大可不必;写操作系统的话,那也大可不必,页面映射更好。Top
16 楼litop(火龙)回复于 2003-11-08 10:13:01 得分 0
upTop
17 楼stone1982(强)回复于 2003-11-08 11:23:54 得分 5
对于pop而言,你可以从教材中就可以知道,cs段寄存器是不可以作为
操作数的(ss是可以的),在进行硬件电路的设计中的,它的作用是大致有了明确用途的
我们知道汇编语言是直接面向硬件的,所以其就考虑了各自的功能。
Top
18 楼bw78619(Genghis Khan)回复于 2003-11-09 16:44:02 得分 5
cs,ss也用保护,不过当调用call,int指令的时候,他会自动的先将cs压入栈中。
Top
19 楼xiaofeng_cxy(萧风)回复于 2003-11-10 10:54:33 得分 5
阁下也在看uc/os啊!!
我也是看不懂他的汇编的那段
有时间多交流啊!!
QQ:422150
email: zhuxiangguo@163.net
msn: zhuxiangguo@msn.comTop
20 楼litop(火龙)回复于 2003-11-13 08:57:07 得分 0
TO:xiaofeng_cxy(萧风)
是啊,我觉得汇编的那段太难懂了。你都是搞单片机的吧,那我们交流下啊.我现系南海,你呢?Top
21 楼litop(火龙)回复于 2004-03-03 16:31:27 得分 0
谢谢大家的讨论!Top




