Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43580
  • 博文数量: 12
  • 博客积分: 480
  • 博客等级: 下士
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-26 23:33
文章分类
文章存档

2010年(12)

我的朋友

分类: LINUX

2010-04-26 23:35:39

                             linux0.11内核学习笔记

嵌入汇编的用法举例:
选自traps.c:


#define get_set_byte(seg,addr)
({\
register char __res; \
__asm__("push %%fs; \
         mov %%ax,%%fx; \ //用seg设置fs,嵌入汇编寄存器前需有两个%
         movb %%fs:%2,%%al; \ //取seg:addr处1字节内容到al寄存器
         pop %%fs"
\
         :"=a" (__res) \ //输出寄存器列表,=表示输出寄存器
         :"0" (seg), "m" (*(addr))); \ //输入寄存器列表,0表示使用与上面相同位置相同的寄存器
__res;})    //最后一行表示函数输出 __res (eax中的值在上面已经赋给__res)



常用寄存器加载代码说明:
a        eax
b        ebx
c        ecx         
d        edx        
S        esi              
D        edi             
q        动态分配字节可寻址寄存器 (eax ebx ecx 或 edx)
r        使用任意动态分配的寄存器
m        内存地址

阅读(627) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:as86不常用指令集锦

给主人留下些什么吧!~~