转载请注明出处:

http://blog.csdn.net/weifenghai/article/details/52794872

 

概述:

内核中分配文件描述符时找第一个0的位置的一个底层函数,了解Linux内核嵌入式汇编知识参见《LINUX内核源代码情景分析(上)》中的1.5节《1.5Linux内核源代码中的汇编语言代码》,内核汇编指令参见《汇编语言程序设计(美)布鲁姆_着,马朝晖_等译》,代码摘自2.6.11.1内核。

函数代码:

/**

*find_first_zero_bit - find the first zero bit in a memory region

*@addr: The address to start the search at

*@size: The maximum size to search

*

*Returns the bit-number of the first zero bit, not the number of the byte

*containing a bit.

*/

static inline int find_first_zero_bit(constunsigned long *addr, unsigned size)

{

intd0, d1, d2;

intres;

if(!size)

return0;

/*This looks at memory. Mark it volatile to tell gcc not to move it around */

__asm__ __volatile__(

"movl$-1,%%eax\n\t"

"xorl%%edx,%%edx\n\t"

"repe;scasl\n\t"

"je1f\n\t"

"xorl-4(%%edi),%%eax\n\t"

"subl$4,%%edi\n\t"

"bsfl%%eax,%%edx\n"

"1:\tsubl%%ebx,%%edi\n\t"

"shll$3,%%edi\n\t"

"addl%%edi,%%edx"

:"=d"(res), "=&c" (d0), "=&D" (d1), "=&a"(d2)

:"1"((size + 31) >> 5), "2" (addr), "b" (addr) :"memory");

returnres;

}

代码分析:

输出部:

代码::"=d" (res), "=&c" (d0), "=&D"(d1), "=&a" (d2)

解释:

%0: res放入edx

%1: d0放入ecx

%2:d1放入edi

%3:d2放入eax

输入部:

代码::"1" ((size + 31) >> 5), "2" (addr),"b" (addr)

%4:与$1相同,(size + 31) >>5放入ecx

%5:与$2相同,addr放入edi

%6:addr 放入ebx

损坏部:: "memory"

指令部:

"movl$-1,%%eax\n\t":把eax的所有位都置成1

"xorl%%edx,%%edx\n\t":把edx置0

"repe;scasl\n\t":在edi(即addr)中搜索与eax不匹配的(即不全为1的)

"je1f\n\t" 没有找到

"xorl-4(%%edi),%%eax\n\t"  把eax中edi为0的位置1,其它位置0

"subl$4,%%edi\n\t"  edi存当前找到的位置

"bsfl%%eax,%%edx\n" edx存放eax中从右边第一个为1的位的索引,从0开始,edx存放目标字节内的偏移

"1:\tsubl%%ebx,%%edi\n\t"   现在edi中存放字节偏移位置

"shll$3,%%edi\n\t"    edi左移3位,存偏整体移位数

"addl%%edi,%%edx"   计算偏移位数

 

转载请注明出处:

http://blog.csdn.net/weifenghai/article/details/52794872

Linux内核源码分析—Linux内核中的嵌入式汇编相关推荐

  1. v06.03 鸿蒙内核源码分析(调度队列) | 内核调度也需要排队 | 百篇博客分析HarmonyOS源码

    子曰:"君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已."<论语>:学而篇 百篇博客系列篇.本篇为: v06.xx 鸿蒙内核源码分析(调度队列篇) ...

  2. linux ptrace 内核源码分析,Linux ptrace详细分析系列(一)

    原标题:Linux ptrace详细分析系列(一) 本文为看雪论坛优秀文章 看雪论坛作者ID:有毒 备注:文章中使用的Linux内核源码版本为Linux 5.9,使用的Linux版本为Linux ub ...

  3. linux nat源码分析,Linux下NAT/NAPT规则源码分析

    前面有一篇文章分析了为什么在PREROUTING做DNAT对本地连接不起作用?本文再紧接着上文,深入分析一下NAT/NAPT的规则. 事情的起因要从上的那篇的文章说起,因为我的本科生毕业设计也是做P2 ...

  4. linux ptrace 内核源码分析,linux 3.5.4 ptrace源码分析分析(系列一)

    ptrace是linux系统中为了调试专门设立的一种系统调用.要想调试调试一个进程,有两种方式: PTRACE_TRACEME和PTRACE_ATTACH.这两种方式的主要区别可以概括为: PTRAC ...

  5. linux操作系统源码分析,linux操作系统源代码详细分析.doc

    linux操作系统源代码详细分析.doc LINUX操作系统源代码详细分析内容简介LINUX拥有现代操作系统所有的功能,如真正的抢先式多任务处理.支持多用户,内存保护,虚拟内存,支持SMP.UP,符合 ...

  6. linux 进程调度源码分析,Linux调度器源码分析

    代码分析根据3.10版本 通过对前面的学习我们知道Linux的调度分为两种 周期调度 完成周期性算法参数的更新和系统其它实际的检查 主调的 真正的调度过程 我们现在来看下主调的的代码框架. 入口 根& ...

  7. linux权限源码分析,Linux基础之文件权限详解

    Linux中对于权限的制定虽然没有Windows的那么精细,但是如果你了解并掌握Linux中文件的权限知识,也可以像Windows那样对权限做到精确配置. Linux中的文件权限是什么? 如何查看Li ...

  8. linux lsof 源码分析,linux lsof详解

    lsof全名list openedfiles,也就是列举系统中已经被打开的文件.我们都知道,linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件.所以,用好lsof命 ...

  9. v35.03 鸿蒙内核源码分析(时间管理) | 内核基本时间单位是谁 | 百篇博客分析HarmonyOS源码

    子曰:"譬如为山,未成一篑,止,吾止也:譬如平地,虽覆一篑,进,吾往也." <论语>:子罕篇 百篇博客系列篇.本篇为: v35.xx 鸿蒙内核源码分析(时间管理篇) | ...

最新文章

  1. C# richtextbox 自动下拉到最后 方法 RichTextBox读取txt中文后出现乱码
  2. TortoiseSVN使用方法
  3. x3250m6系列服务器,IBM服务器X3250 M6 E3-1230v6 8GB 4x3.5 C110 300W 无驱
  4. oracle 两表两列数据对比_Oracle、PostgreSQL与Mysql数据写入性能对比
  5. 分布式光伏贷款欲破冰 多家银行推出相关业务
  6. C# DataTable怎么合计字段
  7. vue比php的优势,vue.js的优势是什么
  8. 树(2)-----leetcode(层、深度、节点)
  9. 中文文本分析工具总结
  10. python写病毒代码_十行 Python 代码写一个USB病毒
  11. 例如微博表情添加到textView中
  12. c语言中 输出操作是由库函数,【判断题】在 C语言中,输入操作是由库函数scanf完成,输出操作是由库函数printf完成 。...
  13. 【生产调度】基于Harmony Search (HSPMS) 和 Shuffled Complex Evolution (SCEPMS) 实现并行机器调度附matlab代码
  14. 唯芸星童鞋的第一个博客。
  15. 谈谈keep-alive的理解
  16. 虚拟机可以做成存储服务器吗,利用win10自带虚拟机功能轻松打造家用nas
  17. 专题教程——选队长游戏
  18. short与Short类型转换其它数据类型
  19. layui-vertify不生效
  20. 聊聊去年最火的前端库zx

热门文章

  1. Python调用有道翻译API
  2. 软件测试入职1年多薪资正常应该有多少?
  3. windows10系统删除本地git记录的账号密码
  4. FFmpeg学习全家桶合集---致敬雷神
  5. 车载网络 - Autosar网络管理 - 基本概念
  6. 呆滞物料都是泪,企业该如何避免难题?
  7. 请领导过目文件怎么说_出差在外,领导的同学请吃饭,问你“去不去”,会来事说3个话术...
  8. Ant Warning :***** moify in furture 解决方案
  9. Mac数据图表软件,画出漂亮的论文插图
  10. 【maya】metaHuman导入maya报错的问题