博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
方便查看 linux/include/asm/system.h
阅读量:7115 次
发布时间:2019-06-28

本文共 2291 字,大约阅读时间需要 7 分钟。

1 #define move_to_user_mode() \  2 __asm__ ("movl %%esp,%%eax\n\t" \  3         "pushl $0x17\n\t" \  4         "pushl %%eax\n\t" \  5         "pushfl\n\t" \  6         "pushl $0x0f\n\t" \  7         "pushl $1f\n\t" \  8         "iret\n" \  9         "1:\tmovl $0x17,%%eax\n\t" \ 10         "movw %%ax,%%ds\n\t" \ 11         "movw %%ax,%%es\n\t" \ 12         "movw %%ax,%%fs\n\t" \ 13         "movw %%ax,%%gs" \ 14         :::"ax") 15  16 #define sti() __asm__ ("sti"::) 17 #define cli() __asm__ ("cli"::) 18 #define nop() __asm__ ("nop"::) 19  20 #define iret() __asm__ ("iret"::) 21  22 #define _set_gate(gate_addr,type,dpl,addr) \ 23 __asm__ ("movw %%dx,%%ax\n\t" \ 24         "movw %0,%%dx\n\t" \ 25         "movl %%eax,%1\n\t" \ 26         "movl %%edx,%2" \ 27         : \ 28         : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \ 29         "o" (*((char *) (gate_addr))), \ 30         "o" (*(4+(char *) (gate_addr))), \ 31         "d" ((char *) (addr)),"a" (0x00080000)) 32  33 #define set_intr_gate(n,addr) \ 34         _set_gate(&idt[n],14,0,addr) 35  36 #define set_trap_gate(n,addr) \ 37         _set_gate(&idt[n],15,0,addr) 38  39 #define set_system_gate(n,addr) \ 40         _set_gate(&idt[n],15,3,addr) 41  42 #define _set_seg_desc(gate_addr,type,dpl,base,limit) {\ 43         *(gate_addr) = ((base) & 0xff000000) | \ 44                 (((base) & 0x00ff0000)>>16) | \ 45                 ((limit) & 0xf0000) | \ 46                 ((dpl)<<13) | \ 47                 (0x00408000) | \ 48                 ((type)<<8); \ 49         *((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \ 50                 ((limit) & 0x0ffff); } 51  52 #define _set_tssldt_desc(n,addr,type) \ 53 __asm__ ("movw $104,%1\n\t" \ 54         "movw %%ax,%2\n\t" \ 55         "rorl $16,%%eax\n\t" \ 56         "movb %%al,%3\n\t" \ 57         "movb $" type ",%4\n\t" \ 58         "movb $0x00,%5\n\t" \ 59         "movb %%ah,%6\n\t" \ 60         "rorl $16,%%eax" \ 61         ::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \ 62          "m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \ 63         ) 64  65 #define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89") 66 #define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82") 67

 

转载于:https://www.cnblogs.com/caesarxu/p/3261227.html

你可能感兴趣的文章
JavaFX控件——FileChooser(文件选择框)
查看>>
视频直播网站开发千万不能忘的一个知识点
查看>>
Unity 3D中的射线与碰撞检测
查看>>
3月21日云栖精选夜读 | 重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell ...
查看>>
puppet确保程序运行
查看>>
Java spring boot 2.0连接mysql异常:The server time zone value 'Öйú±ê×¼Ê...
查看>>
Python爬虫入门教程 7-100 蜂鸟网图片爬取之二
查看>>
使用expo在安卓模拟器中运行React Native程序
查看>>
码农西游 | 写一本技术书可以赚多少钱
查看>>
最详细的Vue Hello World应用开发步骤
查看>>
标签打印软件如何制作三角形合格证
查看>>
阿里云Web应用防火墙知识,了解阿里云Web应用防火墙
查看>>
通过iotop与performance_schema.threads查看mysql的IO使用情况
查看>>
struts
查看>>
Spring Cloud服务短路Netflix Hystrix
查看>>
mysql5.7 修改默认密码
查看>>
把.Net开发环境迁移到Linux上去
查看>>
Android BottomNavigationBar底部导航控制器的使用
查看>>
Kubernetes Dashboard on Ubuntu 16.04安装记录
查看>>
网站验收新标准:所有颜色均可以在可视化后台修改
查看>>