阅读:1683回复:10
哪位懂AT&T汇编的帮我解释一下这段代码,谢谢!是关于端口读写的! #define __OUT1(s,x) \\ extern inline void out##s(unsigned x value, unsigned short port) { #define __OUT2(s,s1,s2) \\ __asm__ __volatile__ (\"out\" #s \" %\" s1 \"0,%\" s2 \"1\" #define __OUT(s,s1,x) \\ __OUT1(s,x) __OUT2(s,s1,\"w\") : : \"a\" (value), \"Nd\" (port)); } \\ __OUT1(s##_p,x) __OUT2(s,s1,\"w\") __FULL_SLOW_DOWN_IO : : \"a\" (value), \"Nd\" (port));} \\ #define __IN1(s) \\ extern inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v; #define __IN2(s,s1,s2) \\ __asm__ __volatile__ (\"in\" #s \" %\" s2 \"1,%\" s1 \"0\" #define __IN(s,s1,i...) \\ __IN1(s) __IN2(s,s1,\"w\") : \"=a\" (_v) : \"Nd\" (port) ,##i ); return _v; } \\ __IN1(s##_p) __IN2(s,s1,\"w\") __FULL_SLOW_DOWN_IO : \"=a\" (_v) : \"Nd\" (port) ,##i ); return _v; } \\ #define __INS(s) \\ extern inline void ins##s(unsigned short port, void * addr, unsigned long count) \\ { __asm__ __volatile__ (\"rep ; ins\" #s \\ : \"=D\" (addr), \"=c\" (count) : \"d\" (port),\"0\" (addr),\"1\" (count)); } #define __OUTS(s) \\ extern inline void outs##s(unsigned short port, const void * addr, unsigned long count) \\ { __asm__ __volatile__ (\"rep ; outs\" #s \\ : \"=S\" (addr), \"=c\" (count) : \"d\" (port),\"0\" (addr),\"1\" (count)); } |
|
|
沙发#
发布于:2002-08-10 20:16
谢谢!
版主以后多多来论坛啊,回答我们这些小弟的问题! |
|
|
板凳#
发布于:2002-08-10 19:36
你的语句太多,暂且用这一个来说明一下:
关于更详细的材料可以参考www.lisoleg.net上关于at&t汇编的两篇文章,或者自己看info as中关于汇编的部分。 #define __OUTS(s) \\ extern inline void outs##s(unsigned short port, const void * addr, unsigned long count) \\ { __asm__ __volatile__ (\"rep ; outs\" #s \\ : \"=S\" (addr), \"=c\" (count) : \"d\" (port),\"0\" (addr),\"1\" (count)); } 在at&t格式下复杂的通常是限定,即语句后面的三个冒号的说明。其他的应该很简单,目的顺序和masm的相反什么的,基本的用法不说了。 我说一下这三个限定: 第一个限定:第一个冒号后的部分,说明了这段汇编的输出。=是寄存器输出的要求格式,s规定了esi,c规定了ecx,其他还有类似的a,b,d等。 第二个限定:第二个冒号后面的部分,可以理解为进入汇编执行前的初始化情况,在这个例子中,会在edx中装入port,0,1由编译器来选择合适的寄存器。 第三个限定:这通常是为了防止某些副作用而声明的。像rep stosl隐式的会使用edi,ecx,在这样的汇编中就应该指明这些寄存器在分配中不可用。 好像我就记得这么一点了,还有问题? |
|
|
地板#
发布于:2002-08-09 15:22
有电子版就请给我发一份zhusqi@sohu.com
|
|
|
地下室#
发布于:2002-08-09 13:12
偶手上就有,不过没怎么看
|
|
|
5楼#
发布于:2002-08-08 15:40
可是我看过了几眼,不怎么样啊!
为什么还要买呢?有电子版看看还差不多! |
|
|
6楼#
发布于:2002-08-08 14:05
买一套吗(2本,150),是需要投资的 :P
|
|
7楼#
发布于:2002-08-07 20:49
我也知啊,可是没有电子版的啊?
|
|
|
8楼#
发布于:2002-08-07 20:07
你在www.googel.com 使用搜索回找到一打《linux内核源代码情景分析》
|
|
9楼#
发布于:2002-08-06 15:25
你说的是书吧,有电子版下载吗?
|
|
|
10楼#
发布于:2002-08-06 09:24
看一下<< linux内核源代码情景分析>>第一章,这么多代码, 解释起来好烦。
|
|