Непонятная строка функции

Модератор: Модераторы разделов

pktfag
Сообщения: 142
ОС: Arch Linux

Непонятная строка функции

Сообщение pktfag »

Что значит 4-я строка этой функции:

static __inline__ void
outb( u_char value, u_long port )
{
__asm__ __volatile__ ("outb %0,%1"::"a" (value), "d" ((u_short) port));
}
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Непонятная строка функции

Сообщение v04bvs »

рискну предположить, что это запись в порт port значения value
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Непонятная строка функции

Сообщение d_Sun »

v04bvs писал(а):
18.07.2006 11:30
рискну предположить, что это запись в порт port значения value


:D Предположение бесспорно верное, только тема __asm__ __volatile__ не раскрыта :D
Моя подпись сильно длинная :)
Спасибо сказали:
pktfag
Сообщения: 142
ОС: Arch Linux

Re: Непонятная строка функции

Сообщение pktfag »

Вот про __asm__ из файла sys/cdefs.h:
#define __weak_reference(sym,alias) \
__asm__(".weak " #alias); \
__asm__(".equ " #alias ", " #sym)

А про __volatile__ vim пишет вот такое сообщение, когда нажимаешь Ctrl+wCtrl+i
E387: Match is on current line

А что такое "::" и "," в конструкции ("outb %0,%1"::"a" (value), "d" ((u_short) port)). Как вообще можно понять эту конструкцию?
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Непонятная строка функции

Сообщение d_Sun »

Да вам в гугл с запросом "gcc asm" :)
Моя подпись сильно длинная :)
Спасибо сказали:
pktfag
Сообщения: 142
ОС: Arch Linux

Re: Непонятная строка функции

Сообщение pktfag »

Спасибо!
Спасибо сказали: