fork(7) download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. char *x = "asbc4a2bab ";
  6. char *y = "ab";
  7. char bufor[100];
  8. asm volatile (
  9. ".intel_syntax noprefix;"
  10. "mov ecx,%0;"
  11. "push ecx;" //wrzuca na stos
  12. "mov ecx,%1;"
  13. "mov eax,%2;"
  14. "call zadanie1;"
  15. "jmp wyjscie;"
  16. "zadanie1:"
  17. "push ebp;" //wrzucamy ebp na stos
  18.  
  19. "push eax;"
  20. "push ecx;" //ecx zliczanie
  21. "push edi;" //edi destination
  22. "mov ebp,esp;" //do ebp adres stosu
  23.  
  24. "mov esi,[ebp+20];" //esi bezposrednio do x
  25. "mov edi,[ebp+4];" //edi adres y
  26. "mov ebx,[ebp+8];"//ebx bufor
  27. "mov eax,0;"//eax to false
  28. "push eax;"
  29. "push esi;"
  30. "push eax;"
  31. "etykieta_x:"
  32.  
  33. "mov eax,[esp+8];"
  34. "cmp eax,0;"
  35. "je etykieta_y;"
  36. "mov [esp+4],esi;"
  37. "mov eax,0;"
  38. "mov [esp+8],eax;"
  39. //"mov [esp+4],esi;"
  40. "etykieta_y:"
  41.  
  42. "mov eax,[edi];"
  43. "cmp eax,'\0';" //porownoje eax z koncem
  44. "je koniec_etykiety_x;"
  45. "add edi,1;"//zwiekszamy petle
  46. "cmp eax,[esi];"//porownoje y i x
  47. "jne etykieta_y;"//wrocimy do etykiety y jesli nie sa rowne
  48. "ustaw_flage:"
  49. "pop eax;"
  50. "mov eax,1;" //ustawia flage
  51. "push eax;"
  52.  
  53. "koniec_etykiety_x:"
  54. "pop eax;"
  55. "cmp eax,1;"
  56. "jne iteruj_dalej;"
  57. "mov eax,0;"
  58. "push eax;"
  59.  
  60. "iteruj_po_znakach:"
  61. "add esi,1;"
  62. "mov eax,[esi];"
  63. "cmp eax,'\0';"
  64. "je koniec;"
  65. "cmp eax,' ';"
  66. "je spacja_wykryta;"
  67. "jmp etykieta_x;"
  68.  
  69. "spacja_wykryta:"
  70. "mov eax,1;"
  71. "mov [esp+8],eax;"
  72. "jmp iteruj_po_znakach;"
  73.  
  74.  
  75.  
  76. "iteruj_dalej:"
  77. "mov eax,0;"
  78. "push eax;"
  79. "add esi,1;"//zwiekszamy adres
  80. "mov eax,[esi];"//pobieramhy nast zznak
  81. "cmp eax,'\0';"
  82. "je zapisz_do_bufora;"
  83. "cmp eax,' ';"
  84. "je spacja_wykryta_2;"
  85.  
  86. "mov eax,[esp+8];"
  87. "cmp eax,0;"
  88. "je etykieta_x;"
  89. "jmp zapisz_do_bufora;"
  90.  
  91. "spacja_wykryta_2:"
  92. "mov eax,1;"
  93. "mov [esp+8],eax;"
  94. "jmp iteruj_dalej;"
  95.  
  96.  
  97. "zapisz_do_bufora:"
  98. "mov eax,[esp+4];"
  99.  
  100. "interuj_po_slowie:"
  101. "mov edx,[eax];"
  102. "cmp edx,' ';"
  103. "je etykieta_x;"
  104. "cmp edx, '\0';"
  105. "je etykieta_x;"
  106.  
  107. "mov [ebx],edx;"
  108. "add eax,1;"
  109. "add ebx,1;"
  110. "jmp iteruj_po_slowie;"
  111.  
  112. "koniec:"
  113. "pop edi;" //zdejmuje ze stosu
  114. "pop ecx;"
  115. "pop eax;"
  116. "pop ebp;"
  117. "ret;" //wyjdzie z funkcji
  118. "wyjscie:"
  119. ".att_syntax_prefix;"
  120. :
  121. :"r"(x), "r"(y), "r"(bufor)
  122. :"eax", "ecx"
  123. );
  124. return 0;
  125. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c: Assembler messages:
prog.c:10: Error: no such instruction: `addl $112,%esp'
prog.c:12: Error: no such instruction: `xorl %eax,%eax'
prog.c:13: Error: no such instruction: `popl %ebx'
prog.c:16: Error: no such instruction: `popl %esi'
stdout
Standard output is empty