#define move_to_user_mode() \ //
__asm__("movl %%esp,%%eax\n\t" \ //保存指针esp到eax中
"pushl $0x17\n\t" \ //首先将堆栈选择符ss入栈
"pushl %%eax\n\t" \ //将保存的堆栈指针esp入 //栈
"pushfl\n\t" \ //将标志寄存器入栈
"pushl $0x0f\n\t" \ //task0代码段选择符cs入 //栈
"pushl $1f\n\t" \ //标号1的偏移地址eip入栈
"iret\n" \ //执行中断返回指令,则会 //跳转到下面标号
"1:\t movl $0x17,%%eax\n\t"\ //此时开始执行任务0
"movw %%ax,%%ds\n\t" \ //初始化寄存器指向本局部 //表的数据段
"movw %%ax,%%es\n\t" \ //
"movw %%ax,%%fs\n\t" \ //
"movw %%ax,%%gs" \ //
: \ //
: \ //
:"ax");
#define sti() __asm__("sti"::) //开中断
#define cli() __asm__("cli"::) //关中断
#defin
linux011-system.h
最新推荐文章于 2023-06-30 13:20:07 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)