Как добавить ассемблерный код в Linux - PullRequest
2 голосов
/ 24 февраля 2009

Я пишу модуль ядра Linux на Fedora core 6, и мне интересно, кто-нибудь может сказать мне, как добавить код сборки, показанный ниже, в мою программу. Код ассемблера был написан для 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 ]

6 голосов
/ 24 февраля 2009

Инструкция по сборке GCC

Если вы просто ищете синтаксис:

Формат основной встроенной сборки очень прямо вперед. Его основной форма

asm («код сборки»);

Пример: asm ("movl% ecx% eax"); / * перемещает содержимое ecx в eax * /

В частности, посмотрите section 3 , в котором сравнивается Intel с синтаксисом AT & T.

4 голосов
/ 24 февраля 2009

Вы пытались написать это на C? На мой наивный взгляд не похоже, что это должно быть в ассемблере.

1 голос
/ 24 февраля 2009

В ядре вы также можете использовать макрос __asm__, например, см. include/asm/atomic.h. LXR - очень хороший сайт для просмотра и поиска по исходному коду Linux, там вы найдете много примеров.

0 голосов
/ 24 февраля 2009

Вы спрашиваете, как написать встроенную сборку в gcc. Раздел 5.35 руководства gcc содержит обширную информацию об этом. Однако для этого конкретного примера вам почти наверняка гораздо лучше переписать эти функции на C, так как вы, вероятно, получите лучший код из компилятора, чем то, что производят операторы asm ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...