Guest User

Untitled

a guest
Jul 16th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. int fork()
  2. {
  3. int pid;
  4. __asm__ __volatile__ (
  5. "movl $2, %%eax\n"
  6. "int $0x80\n"
  7. "movl %%eax,%0\n"
  8. "cmpl $0,%%eax\n"
  9. "jge else4\n"
  10. "neg %%eax\n"
  11. "movl %%eax,%1\n"
  12. "movl $-1,%0\n"
  13. "jmp endif4\n"
  14. "else4:\n"
  15. "movl %%eax,%0\n"
  16. "endif4:"
  17. :"=g" (pid), "=g" (errno)
  18. );
  19. return pid;
  20. }
  21.  
  22. void exit()
  23. {
  24. __asm__ (
  25. "movl $1, %%eax\n"
  26. "int $0x80\n"
  27. "cmpl $0,%%eax\n"
  28. "jge else3\n"
  29. "neg %%eax\n"
  30. "movl %%eax,%0\n"
  31. "else3:"
  32. :"=g" (errno)
  33. );
  34. }
  35.  
  36. int get_stats(int pid, int *tics){
  37. int sortida;
  38. __asm__ __volatile__ (
  39. "pushl %%ebx\n"
  40. "movl %2,%%ebx\n"
  41. "movl %3,%%ecx\n"
  42. "movl $35, %%eax\n"
  43. "int $0x80\n"
  44. "movl %%eax,%0\n"
  45. "cmpl $0,%%eax\n"
  46. "jge else6\n"
  47. "neg %%eax\n"
  48. "movl %%eax,%1\n"
  49. "movl $-1,%0\n"
  50. "jmp endif6\n"
  51. "else6:\n"
  52. "movl $0,%0\n"
  53. "endif6:\n"
  54. "popl %%ebx"
  55. :"=g" (sortida), "=g" (errno)
  56. :"g" (pid), "g" (tics)
  57. );
  58. return sortida;
  59. }
  60.  
  61. int sem_init (int n_sem, unsigned int value)
  62. {
  63. int sortida;
  64.  
  65. if (n_sem < 0) {
  66. errno = 22; //EINVAL
  67. sortida = -1;
  68. }else{
  69. __asm__ __volatile__ (
  70. "pushl %%ebx\n"
  71. "movl %2, %%ebx\n"
  72. "movl %3, %%ecx\n"
  73. "movl $21, %%eax\n"
  74. "int $0x80\n"
  75. "movl %%eax,%0\n"
  76. "cmpl $0,%%eax\n"
  77. "jge else7\n"
  78. "neg %%eax\n"
  79. "movl %%eax,%1\n"
  80. "movl $-1,%0\n"
  81. "jmp endif7\n"
  82. "else7:\n"
  83. "movl $0,%0\n"
  84. "endif7:\n"
  85. "popl %%ebx"
  86. :"=g" (sortida), "=g" (errno)
  87. :"g" (n_sem), "g" (value)
  88. );
  89. }
  90. return sortida;
  91. }
  92.  
  93. int sem_wait (int n_sem)
  94. {
  95. int sortida;
  96.  
  97. if (n_sem < 0) {
  98. errno = 22; //EINVAL
  99. sortida = -1;
  100. }else{
  101. __asm__ __volatile__ (
  102. "pushl %%ebx\n"
  103. "movl %2, %%ebx\n"
  104. "movl $22, %%eax\n"
  105. "int $0x80\n"
  106. "movl %%eax,%0\n"
  107. "cmpl $0,%%eax\n"
  108. "jge else8\n"
  109. "neg %%eax\n"
  110. "movl %%eax,%1\n"
  111. "movl $-1,%0\n"
  112. "jmp endif8\n"
  113. "else8:\n"
  114. "movl $0,%0\n"
  115. "endif8:\n"
  116. "popl %%ebx"
  117. :"=g" (sortida), "=g" (errno)
  118. :"g" (n_sem)
  119. );
  120. }
  121. return sortida;
  122. }
  123.  
  124. int sem_signal (int n_sem)
  125. {
  126. int sortida;
  127.  
  128. if (n_sem < 0) {
  129. errno = 22; //EINVAL
  130. sortida = -1;
  131. }else{
  132. __asm__ __volatile__ (
  133. "pushl %%ebx\n"
  134. "movl %2, %%ebx\n"
  135. "movl $23, %%eax\n"
  136. "int $0x80\n"
  137. "movl %%eax,%0\n"
  138. "cmpl $0,%%eax\n"
  139. "jge else9\n"
  140. "neg %%eax\n"
  141. "movl %%eax,%1\n"
  142. "movl $-1,%0\n"
  143. "jmp endif9\n"
  144. "else9:\n"
  145. "movl $0,%0\n"
  146. "endif9:\n"
  147. "popl %%ebx"
  148. :"=g" (sortida), "=g" (errno)
  149. :"g" (n_sem)
  150. );
  151. }
  152. return sortida;
  153. }
  154.  
  155. int sem_destroy (int n_sem)
  156. {
  157. int sortida;
  158.  
  159. if (n_sem < 0) {
  160. errno = 22; //EINVAL
  161. sortida = -1;
  162. }else{
  163. __asm__ __volatile__ (
  164. "pushl %%ebx\n"
  165. "movl %2, %%ebx\n"
  166. "movl $24, %%eax\n"
  167. "int $0x80\n"
  168. "movl %%eax,%0\n"
  169. "cmpl $0,%%eax\n"
  170. "jge else10\n"
  171. "neg %%eax\n"
  172. "movl %%eax,%1\n"
  173. "movl $-1,%0\n"
  174. "jmp endif10\n"
  175. "else10:\n"
  176. "movl $0,%0\n"
  177. "endif10:\n"
  178. "popl %%ebx"
  179. :"=g" (sortida), "=g" (errno)
  180. :"g" (n_sem)
  181. );
  182. }
  183. return sortida;
  184. }
Add Comment
Please, Sign In to add comment