Chinaunix

标题: gcc编译嵌入汇编指令的c代码,出错???高手进来! [打印本页]

作者: studyonly    时间: 2004-11-16 11:17
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
为了测试gcc中,对嵌入汇编指令的c/c++代码,偶写了一段如下代码作测试用:

__asm__("mov ah, al";

gcc编译时的提示错误为:
/tmp/ccldQTM.s:Assembler messages:
/tmp/ccldQTM.s:16:Error:too many memory reference for 'mov'

什么原因,请高手解释:

随便问一下:Linux有没有和M$ NT内核系统的运行级的概念,即不能直接outp()之类的对硬件端口直接访问,Linux有没有这个保护机制???

等……
作者: aero    时间: 2004-11-16 11:31
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
linux下用AT&T风格的汇编语言。用__asm__("movb %al, %ah";就好了。
作者: _z_    时间: 2004-11-16 11:55
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
__asm__("movb %%ah, %%al";
作者: win_hate    时间: 2004-11-16 12:22
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
[quote]原帖由 "studyonly"]Linux有没有和M$ NT内核系统的运行级的概念,即不能直接outp()之类的对硬件端口直接访问,Linux有没有这个保护机制..........[/quote 发表:


不能直接 out
作者: ificanfly    时间: 2004-11-16 12:51
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
[quote]原帖由 "studyonly"]Linux有没有和M$ NT内核系统的运行级的概念,即不能直接outp()之类的对硬件端口直接访问,Linux有没有这个保护机制..........[/quote 发表:

如果连这个都没有的系统谁还敢用作服务器。
linux下可以在用户模式中直接使用IO端口,范围限制在0-0x3ff,但是你的程序必须有root权限。而且在直接访问端口前还得ioperm取得使用权。
当然如果你喜欢变态的程序又不怕带来麻烦,就iopl(3),,这样子爽是爽了,就是让人有点心神不安。
这个功能很方便地。比win上爽多了。
作者: studyonly    时间: 2004-11-16 13:49
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
哪里有相关的资料???
作者: studyonly    时间: 2004-11-16 15:28
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
以上问题已经解决,
如何将一个c程序中的变量,赋给寄存器,
例如:

void toAX(int a)
{
     ...
     // 如何实现把a赋给寄存器ax
}

是这样吗? asm("mov ax, %0" : "r"(a))
作者: _z_    时间: 2004-11-16 15:41
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
asm("" : :"ax"(a));
作者: studyonly    时间: 2004-11-16 17:14
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
用汇编产生15H中断:
asm("int $0x15";
编译通过,运行出现段错误!

等……
作者: aero    时间: 2004-11-16 17:16
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
不要完全套用DOS下的程序,关于中断,是有不同的处理的。好好查查资料吧。
作者: studyonly    时间: 2004-11-16 17:41
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
请回答详细一点,要查哪些资料?

谢!
作者: aero    时间: 2004-11-17 08:34
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
AT&T汇编、linux下的syscall、C与汇编混编。
作者: soloarrow    时间: 2004-11-17 10:37
标题: gcc编译嵌入汇编指令的c代码,出错???高手进来!
找资料的话google是个好地方,^_^。还有就是论坛里好像有关于linux下汇编语法的说明,可以找来看看。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2