2

我正在 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
4

4 回答 4

6

GCC 内联汇编方法

如果您只是在寻找语法:

基本内联汇编的格式非常简单。它的基本形式是

asm("汇编代码");

示例:asm("movl %ecx %eax"); /* 将 ecx 的内容移动到 eax */

具体来说,请看第 3 节,它将 Intel 语法与 AT&T 语法进行了比较。

于 2009-02-24T20:28:41.897 回答
4

你试过用C写吗?在我天真的眼中,它看起来不需要在汇编程序中。

于 2009-02-24T20:58:08.923 回答
1

在内核中,您也可以使用__asm__宏,例如参见include/asm/atomic.h. LXR是一个非常好的浏览和搜索 Linux 源代码的站点,你会在那里找到很多示例。

于 2009-02-24T20:37:33.590 回答
0

您要问的是如何在 gcc 中编写内联汇编。gcc 手册的第 5.35 节对此有广泛的信息。然而,对于这个特定的例子,你几乎可以肯定重写这些函数是 C 更好,因为你可能会从编译器中得到比 asm 语句产生的更好的代码......

于 2009-02-24T20:36:47.010 回答