内核新学求助:move_to_user_mode 宏没有看懂
赵博士在书中做了注释,我还是没有看懂。请高手指点一下。谢谢!
#define move_to_user_mode() \
__asm__ ("movl %%esp,%%eax\n\t" \
"pushl $0x17\n\t" \ //“首先将堆栈段选择符(SS)入栈”,
这里入栈的为什么是个直接数 0x17[i][/i]?
"pushl %%eax\n\t" \
"pushfl\n\t" \
"pushl $0x0f\n\t" \ //“将Task0代码段选择符(cs)入栈”,
这里入栈的是直接数0x0f怎么代表了Task0代码段选择cs?[i][/i]
"pushl $1f\n\t" \
"iret\n" \
"1:\tmovl $0x17,%%eax\n\t" \
"movw %%ax,%%ds\n\t" \
"movw %%ax,%%es\n\t" \
"movw %%ax,%%fs\n\t" \
"movw %%ax,%%gs" \
:::"ax")
------解决方案--------------------
这个你看一下16位段选择子的构成就明白了.看看SS段和CS段在段描述符表中的入口位置.