我正在Fedora core 6上编写Linux内核模块,我想知道是否有人可以告诉我如何将下面显示的汇编代码添加到我的程序中。汇编代码是为Windows编写的,我不知道如何转换为Linux内核程序。
#ifdef _MSC_VER
unsigned char lookKbits(char k)
{
_asm {
mov dl, k
mov cl, 16
sub cl, dl
mov eax, [wordval]
shr eax, cl
}
}
unsigned char WORD_hi_lo(char byte_high, char byte_low)
{
_asm {
mov ah,byte_high
mov al,byte_low
}
}
#endif
答案 0 :(得分:6)
如果您只是在寻找语法:
基本内联汇编的格式是 非常直截了当。它的基础 表格是
asm(“汇编代码”);
示例:asm(“movl%ecx%eax”); / *将ecx的内容移动到eax * /
具体来说,请查看section 3,它将英特尔与AT& T语法进行比较。
答案 1 :(得分:4)
你试过用C写吗?对于我天真的眼睛来说,看起来它不需要在汇编程序中。
答案 2 :(得分:1)
在内核中,您也可以使用__asm__
宏,例如,请参阅include/asm/atomic.h
。 LXR是一个非常好的浏览和搜索Linux源代码的网站,你会在那里找到很多例子。
答案 3 :(得分:0)
您要问的是如何在gcc中编写内联汇编。 gcc手册的第5.35节有关于此的广泛信息。但是,对于这个特定的例子,几乎可以肯定的是,重写这些函数几乎肯定是C,因为你可能会从编译器中获得比asm语句产生更好的代码...