⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000006.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;mephisto&nbsp;(魔鬼*修心养性*重新做人),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;在读Linux源代码遇到的问题&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Tue&nbsp;Nov&nbsp;&nbsp;9&nbsp;14:18:26&nbsp;1999)&nbsp;<BR>&nbsp;<BR>这个问题请看gcc的inline&nbsp;assemble&nbsp;<BR>info&nbsp;gcc&nbsp;(在turbolinux上须&nbsp;info&nbsp;--file&nbsp;gcc,土土的说)可以看一下.&nbsp;<BR>在C&nbsp;Extention里面.&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;limbo&nbsp;(每日逢君不见君)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR>∶<I>&nbsp;现在读include\asm-i386\bitops.h的一段代码时,几如读天书,这段代码如下:&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;__inline__&nbsp;void&nbsp;set_bit(int&nbsp;nr,&nbsp;volatile&nbsp;void&nbsp;*&nbsp;addr)&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</I><BR>∶<I>&nbsp;&nbsp;__asm__&nbsp;__volatile__(&nbsp;LOCK_PREFIX&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&quot;btsl&nbsp;%1,%0&quot;&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;:&quot;=m&quot;&nbsp;(ADDR)&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;:&quot;ir&quot;&nbsp;(nr));&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;问题:&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;(1)&nbsp;__asm__&nbsp;是什么意思?&nbsp;难道和编译器有关?&nbsp;</I><BR>gcc&nbsp;'s&nbsp;inline&nbsp;assemble&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;(2)&nbsp;__volatile__&nbsp;是什么意思?&nbsp;</I><BR>告诉笨gcc不要把里面的内存变量优化到寄存器里.&nbsp;例如有个内存变量是放时钟的,&nbsp;<BR>如果优化到register,再使用register期间那个变量都在内存里变掉了都不知道.&nbsp;<BR>这个何中断有关.gcc是自己没法知道这个的.&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;LOCK_PREFIX&nbsp;是什么意思?&nbsp;</I><BR>asm指令&nbsp;lock.&nbsp;在这指令期间不响应中断.&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;(4)&nbsp;&quot;btsl&nbsp;%1,&nbsp;%0&quot;&nbsp;似乎是一个汇编指令,&nbsp;我可以查到这是什么指令吗?&nbsp;如何查?&nbsp;</I><BR>就是bts&nbsp;(bit&nbsp;set)亚.&nbsp;是n86才有的&quot;新&quot;指令.&nbsp;n&gt;=3&nbsp;?&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;(5)&nbsp;:(ADDR)&nbsp;似乎是&nbsp;%1&nbsp;或&nbsp;%0所对应的值,是对应%1还是%0?&nbsp;&quot;=m&quot;似乎是参数?&nbsp;</I><BR>对应&nbsp;%0,&nbsp;&quot;=m&quot;&nbsp;是说明是一个内存的指针.eg.&nbsp;mov&nbsp;[bx],ax&nbsp;这要和mov&nbsp;bx,ax&nbsp;<BR>区分开来.&nbsp;&quot;=&quot;是说明返回值存放的地方.&nbsp;<BR>&nbsp;<BR>&quot;ir&quot;说明是&quot;int&nbsp;register&quot;.&nbsp;gcc的inline&nbsp;asm比turbo&nbsp;C的高明,用&quot;ir&quot;就可以暗示&nbsp;<BR>gcc&nbsp;可以使用任何一个int&nbsp;register作%1,&nbsp;可以从(eax,ebx,ecx,edx,esi,edi,ebp)挑一个.&nbsp;<BR>便於上下文优化register的变量,&nbsp;Turbo&nbsp;C&nbsp;就没有这种灵活性,而且保护寄存器上&nbsp;<BR>比较死板.&nbsp;<BR>&nbsp;<BR>实例:&nbsp;<BR>-----assume------------&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp1&nbsp;=&nbsp;ebx&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp2&nbsp;=&nbsp;[esp+0x20]&nbsp;<BR>-------c&nbsp;code-------------&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setbit(tmp1,tmp2);&nbsp;<BR>&nbsp;<BR>-------genertate&nbsp;asm&nbsp;code-----&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lock&nbsp;btsl&nbsp;%ebx,0x20(%esp,1)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;(6)&nbsp;以上这些问题的解决我可以查什么资料呢?&nbsp;</I><BR>∶<I>&nbsp;limbo敬上&nbsp;</I><BR>mephisto敬敬上&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>约塞连怀疑地摇了摇头,拒绝接受丹比的劝告.&quot;当我抬起来时,我看到人们全在设法赚钱.我&nbsp;<BR>看不见天堂,看不见圣人,也看不见天使.我只看见人们利用每一次正当的冲动和每一场人类&nbsp;<BR>的悲剧大把大把地捞钱.&quot;&nbsp;<BR>&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;ab1-84.bjnet.ed]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -