📄 00000000.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: chenl (bigmouth), 信区: Linux <BR>标 题: Re: 请熟悉汇编的大峡帮忙!!!! <BR>发信站: BBS 水木清华站 (Sat Aug 7 09:10:28 1999) WWW-POST <BR> <BR>【 在 xtime (逝者) 的大作中提到: 】
<BR>∶<I> 下面是Linux进程切换的原代码:
</I><BR>∶<I> #define switch_to(prev,next) do { \
</I><BR>∶<I> __asm__("movl %2,"SYMBOL_NAME_STR(current_set)"\n\t" \
</I><BR>In c: current_set=next;
<BR> __asm longjump (*(((char*(&next->tss.tr)-4))
<BR> /* swith the task, refer to the i386 task switch */
<BR>∶<I> "ljmp %0\n\t" \
</I><BR>∶<I> "cmpl %1,"SYMBOL_NAME_STR(last_task_used_math)"\n\t" \
</I><BR> if(last_task_used_math_coprocessor){
<BR> save all debug register for the
<BR> process "prev"
<BR> use loaddebug();
<BR> }
<BR> return;
<BR>wish this could give u help.
<BR>
<BR>∶<I> "jne 1f\n\t" \
</I><BR>∶<I> "clts\n" \
</I><BR>∶<I> "1:" \
</I><BR>∶<I> : /* no outputs */ \
</I><BR>∶<I> :"m" (*(((char *)&next->tss.tr)-4)), \
</I><BR>∶<I> "r" (prev), "r" (next)); \
</I><BR>∶<I> /* Now maybe reload the debug registers */ \
</I><BR>∶<I> if(prev->debugreg[7]){ \
</I><BR>∶<I> loaddebug(prev,0); \
</I><BR>∶<I> loaddebug(prev,1); \
</I><BR>∶<I> loaddebug(prev,2); \
</I><BR>∶<I> loaddebug(prev,3); \
</I><BR>∶<I> loaddebug(prev,6); \
</I><BR>∶<I> } \
</I><BR>∶<I> } while (0)
</I><BR>∶<I> 恳请大峡给予增援!向小生讲解以下该函数的大体意思。
</I><BR> <BR>-- <BR> <BR> 舟摇摇而轻扬, 风飘飘以吹衣, <BR> 问征夫以前路, 恨晨光之曦微. <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.115.6.100] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -