繁体   English   中英

如何在 Linux 中添加汇编代码

[英]How to add assembly code in Linux

我正在 Fedora core 6 上编写 Linux kernel 模块,我想知道是否有人可以告诉我如何将下面显示的汇编代码添加到我的程序中。 汇编代码是为 Windows 编写的,我不知道如何转换为 Linux kernel 程序。

#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

GCC 内联组装方法

如果您只是在寻找语法:

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

asm("汇编代码");

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM