Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int fork()
- {
- int pid;
- __asm__ __volatile__ (
- "movl $2, %%eax\n"
- "int $0x80\n"
- "movl %%eax,%0\n"
- "cmpl $0,%%eax\n"
- "jge else4\n"
- "neg %%eax\n"
- "movl %%eax,%1\n"
- "movl $-1,%0\n"
- "jmp endif4\n"
- "else4:\n"
- "movl %%eax,%0\n"
- "endif4:"
- :"=g" (pid), "=g" (errno)
- );
- return pid;
- }
- void exit()
- {
- __asm__ (
- "movl $1, %%eax\n"
- "int $0x80\n"
- "cmpl $0,%%eax\n"
- "jge else3\n"
- "neg %%eax\n"
- "movl %%eax,%0\n"
- "else3:"
- :"=g" (errno)
- );
- }
- int get_stats(int pid, int *tics){
- int sortida;
- __asm__ __volatile__ (
- "pushl %%ebx\n"
- "movl %2,%%ebx\n"
- "movl %3,%%ecx\n"
- "movl $35, %%eax\n"
- "int $0x80\n"
- "movl %%eax,%0\n"
- "cmpl $0,%%eax\n"
- "jge else6\n"
- "neg %%eax\n"
- "movl %%eax,%1\n"
- "movl $-1,%0\n"
- "jmp endif6\n"
- "else6:\n"
- "movl $0,%0\n"
- "endif6:\n"
- "popl %%ebx"
- :"=g" (sortida), "=g" (errno)
- :"g" (pid), "g" (tics)
- );
- return sortida;
- }
- int sem_init (int n_sem, unsigned int value)
- {
- int sortida;
- if (n_sem < 0) {
- errno = 22; //EINVAL
- sortida = -1;
- }else{
- __asm__ __volatile__ (
- "pushl %%ebx\n"
- "movl %2, %%ebx\n"
- "movl %3, %%ecx\n"
- "movl $21, %%eax\n"
- "int $0x80\n"
- "movl %%eax,%0\n"
- "cmpl $0,%%eax\n"
- "jge else7\n"
- "neg %%eax\n"
- "movl %%eax,%1\n"
- "movl $-1,%0\n"
- "jmp endif7\n"
- "else7:\n"
- "movl $0,%0\n"
- "endif7:\n"
- "popl %%ebx"
- :"=g" (sortida), "=g" (errno)
- :"g" (n_sem), "g" (value)
- );
- }
- return sortida;
- }
- int sem_wait (int n_sem)
- {
- int sortida;
- if (n_sem < 0) {
- errno = 22; //EINVAL
- sortida = -1;
- }else{
- __asm__ __volatile__ (
- "pushl %%ebx\n"
- "movl %2, %%ebx\n"
- "movl $22, %%eax\n"
- "int $0x80\n"
- "movl %%eax,%0\n"
- "cmpl $0,%%eax\n"
- "jge else8\n"
- "neg %%eax\n"
- "movl %%eax,%1\n"
- "movl $-1,%0\n"
- "jmp endif8\n"
- "else8:\n"
- "movl $0,%0\n"
- "endif8:\n"
- "popl %%ebx"
- :"=g" (sortida), "=g" (errno)
- :"g" (n_sem)
- );
- }
- return sortida;
- }
- int sem_signal (int n_sem)
- {
- int sortida;
- if (n_sem < 0) {
- errno = 22; //EINVAL
- sortida = -1;
- }else{
- __asm__ __volatile__ (
- "pushl %%ebx\n"
- "movl %2, %%ebx\n"
- "movl $23, %%eax\n"
- "int $0x80\n"
- "movl %%eax,%0\n"
- "cmpl $0,%%eax\n"
- "jge else9\n"
- "neg %%eax\n"
- "movl %%eax,%1\n"
- "movl $-1,%0\n"
- "jmp endif9\n"
- "else9:\n"
- "movl $0,%0\n"
- "endif9:\n"
- "popl %%ebx"
- :"=g" (sortida), "=g" (errno)
- :"g" (n_sem)
- );
- }
- return sortida;
- }
- int sem_destroy (int n_sem)
- {
- int sortida;
- if (n_sem < 0) {
- errno = 22; //EINVAL
- sortida = -1;
- }else{
- __asm__ __volatile__ (
- "pushl %%ebx\n"
- "movl %2, %%ebx\n"
- "movl $24, %%eax\n"
- "int $0x80\n"
- "movl %%eax,%0\n"
- "cmpl $0,%%eax\n"
- "jge else10\n"
- "neg %%eax\n"
- "movl %%eax,%1\n"
- "movl $-1,%0\n"
- "jmp endif10\n"
- "else10:\n"
- "movl $0,%0\n"
- "endif10:\n"
- "popl %%ebx"
- :"=g" (sortida), "=g" (errno)
- :"g" (n_sem)
- );
- }
- return sortida;
- }
Add Comment
Please, Sign In to add comment