2

私はFedoraコア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 に移動 */

具体的には、Intel と AT&T の構文を比較するセクション 3を見てください。

于 2009-02-24T20:28:41.897 に答える
4

Cで書いてみましたか?私の素朴な目には、アセンブラである必要があるようには見えません。

于 2009-02-24T20:58:08.923 に答える
1

カーネルでは、__asm__マクロを使用することもできます。例については、 を参照してくださいinclude/asm/atomic.hLXRは、Linux のソースコードをブラウジングおよび検索するための非常に優れたサイトです。そこには多くの例があります。

于 2009-02-24T20:37:33.590 に答える
0

あなたが求めているのは、gcc でインライン アセンブリを記述する方法です。gcc マニュアルのセクション 5.35 には、それに関する広範な情報があります。ただし、この特定の例では、おそらく asm ステートメントが生成するものよりも優れたコードをコンパイラから取得できるため、これらの関数を C で書き直した方が確実にはるかに優れています...

于 2009-02-24T20:36:47.010 に答える