2013-10-14 215 views
3

我有这样的代码:gcc的内联汇编输入变量

void geninterrupt (int x) { 
    __asm__(
    "movb x, %al \n" 
     "movb %al, genint+1 \n" 
     "jmp genint \n" 
    "genint: \n" 
     "int $0 \n" 
    ); 
} 

怎样才能让movb使用geninterrupt()的说法?

+0

见http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.2 。 – dbrank0

回答

2

您需要正确的使用限制字段:

void geninterrupt (int x) { 
    __asm__(" movb %[x], %%al \n" 
      " movb %%al, genint+1 \n" 
      " jmp genint \n" 
      "genint: \n" 
      " int $0 \n" 
     : /* no outputs */ 
     : [x] "m" (x) /* use x as input */ 
     : "al" /* clobbers %al */ 
     ); 
} 

Here's a good how-to about GCC inline assemblylink to the relevant GCC documentation

编辑:既然你的GCC似乎不能够处理标记的操作数

+0

谢谢卡尔(对于这个和包(流行)的问题,今晚我有很多困难..),但我得到这个错误与您的代码:无效的'asm':操作数号码%字母后丢失 __asm __(“movb%[x],%al \ n” –

+0

哎呦 - 错过了一些'%'符号现在修正了,我也不得不改变为'm'约束 –

+0

IT WORKS !!!!非常感谢mate !!也非常感谢你对这两个有用的链接!! :) –