Начнём с того, что не "не работает" а даже не компилируется. Потому что
1. у вас единственный in-параметр, его нужно указать после второго двоеточия
2. у вас 3 clobbered регистра, их нужно указать через запятую после третьего двоеточия, т.е.
int main(void)
{
char *path = "tmp/path";
asm (
"movl $39, %%eax\n\t"
"movl %0, %%ecx\n\t"
"movl $0x1ff, %%ebx\n\t"
"int $0x80\n\t"
: : "r"(path)
: "%eax", "%ebx", "%ecx"
);
return 0;
}
3. собирать надо, судя по коду, под 32 бита, т.е. gcc -m32
А уж после того как скомпилируется -- не работает, потому что
4. у вас перепутан порядок аргументов, в ebx должен идти путь, в ecx -- атрибуты создаваемого каталога