我有这样的代码: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()
的说法?
我有这样的代码: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()
的说法?
您需要正确的使用限制字段:
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 assembly和link to the relevant GCC documentation。
编辑:既然你的GCC似乎不能够处理标记的操作数
谢谢卡尔(对于这个和包(流行)的问题,今晚我有很多困难..),但我得到这个错误与您的代码:无效的'asm':操作数号码%字母后丢失 __asm __(“movb%[x],%al \ n” –
哎呦 - 错过了一些'%'符号现在修正了,我也不得不改变为'm'约束 –
IT WORKS !!!!非常感谢mate !!也非常感谢你对这两个有用的链接!! :) –
见http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.2 。 – dbrank0