QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1285|回复: 3

Linux0.01中的简单问题—关于switch_to(n)

[复制链接]
发表于 2004-8-5 04:43:26 | 显示全部楼层 |阅读模式
我在阅读Linux0.01代码时怎么也弄不懂这一段的用处:

/*
* switch_to(n) should switch tasks to task nr n, first
* checking that n isn't the current task, in which case it does nothing.
* This also clears the TS-flag if the task we switched to has used
* tha math co-processor latest.
*/
#define switch_to(n) {\
struct {long a,b;} __tmp; \
__asm__("cmpl %%ecx,_current\n\t" \
        "je 1f\n\t" \
        "xchgl %%ecx,_current\n\t" \
        "movw %%dx,%1\n\t" \
        "ljmp %0\n\t" \
        "cmpl %%ecx,%2\n\t" \
        "jne 1f\n\t" \
        "clts\n" \
        "1:" \
        ::"m" (*&__tmp.a),"m" (*&__tmp.b), \
        "m" (last_task_used_math),"d" _TSS(n),"c" ((long) task[n])); \
}


AT&T汇编实在太难懂了,请问各位这一段做了什么啊?
明明输入参数有5个,为什么只能在代码中找到%0、%1、%2这三个东东啊?
这个问题把我郁闷死了,求大家帮忙!不胜感激!!
 楼主| 发表于 2004-8-5 13:06:48 | 显示全部楼层
大虾们帮帮忙啊,我把这段代码编译然后反编译,得到这样一段:

00000308  BA40000000           mov edx,0x40
0000030D  8B0D30A40408       mov ecx,[0x804a430]
00000313  390D20A40408       cmp [0x804a420],ecx
00000319  7417                       jz 0x332
0000031B  870D20A40408      xchg ecx,[0x804a420]
00000321  668955FC              mov [ebp-0x4],dx
00000325  FF6DF8                   jmp far [ebp-0x8]
00000328  390D24A40408      cmp [0x804a424],ecx
0000032E  7502                      jnz 0x332
00000330  0F06                      clts
00000332  90                          nop


倒是容易理解一点了,可是jmp far [ebp-0x8]这一句是什么意思呢?[ebp-0x8]根本就没有赋值啊,怎么能用跳转呢?再说跳转过去了怎么再执行下面的代码呀??
我怀疑是不是这段代码是错的呀?各位有没有Linux0.01的代码?帮我看一看Sched.h中switch_to(n)的定义好否?
回复

使用道具 举报

发表于 2004-8-8 17:42:30 | 显示全部楼层
发表一下我的意见,不知对这位兄弟能否有所帮助!!!!

  首先,参数问题:
                "m"是说内存中的变量与寄存器结合,"d","c"分别与edx,ecx结合,这五个变量就
都名花有主了!!!!
  
   第二,ljmp指令是要跳转出现在的代码段的,段选择符放在dx中,这就引用了新任务的tss,而80386

的设计中,这种情况会造成任务切换(只要引用,就不必管ljmp后面的参数了,它没有任何用途)!!!!

   第三,什么时候执行下面的代码:要意识到,执行swith_to时,是在当前任务中,当ljmp时,任务切

换,此时的所有寄存器状态被保存到当前任务的tss,当内核下次调度到该任务时,再执行下面的代

码!!!!

   
                  只有交流才能进步,大家要多多交流呀!!!!
回复

使用道具 举报

发表于 2004-9-1 12:02:38 | 显示全部楼层
  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 06:40 , Processed in 0.069151 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表