longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1683回复:10

哪位懂AT&T汇编的帮我解释一下这段代码,谢谢!

楼主#
更多 发布于:2002-08-02 11:07

是关于端口读写的!

#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)); }

 
除了记忆什么都带不走; 除了足迹什么都留不下。
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-10 20:16
谢谢!
版主以后多多来论坛啊,回答我们这些小弟的问题!
除了记忆什么都带不走; 除了足迹什么都留不下。
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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,在这样的汇编中就应该指明这些寄存器在分配中不可用。
    好像我就记得这么一点了,还有问题?
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-09 15:22
有电子版就请给我发一份zhusqi@sohu.com
除了记忆什么都带不走; 除了足迹什么都留不下。
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-09 13:12
偶手上就有,不过没怎么看
111
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-08 15:40
可是我看过了几眼,不怎么样啊!
为什么还要买呢?有电子版看看还差不多!
除了记忆什么都带不走; 除了足迹什么都留不下。
zhanshi
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2002-12-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-08 14:05
买一套吗(2本,150),是需要投资的 :P
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-07 20:49
我也知啊,可是没有电子版的啊?
除了记忆什么都带不走; 除了足迹什么都留不下。
nxzm
驱动牛犊
驱动牛犊
  • 注册日期2002-05-08
  • 最后登录2002-11-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-07 20:07
你在www.googel.com 使用搜索回找到一打《linux内核源代码情景分析》
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-06 15:25
你说的是书吧,有电子版下载吗?
除了记忆什么都带不走; 除了足迹什么都留不下。
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-06 09:24
看一下<< linux内核源代码情景分析>>第一章,这么多代码, 解释起来好烦。
游客

返回顶部