Advertisement
Guest User

Untitled

a guest
May 30th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -------------------------------------------------------------
  2. # Ma ona zwr ́oci ́c indeks dla najwiekszego z po ́sr ́od podanych
  3. # argument ́ow. Dodatkowo, jez ̇eli maksymalan warto ́s ́c sie
  4. # powtarza, funkcja ma zwr ́oci ́c 0.
  5. # -------------------------------------------------------------
  6. # int max_ind_asm(int a, int b, int c, int d);
  7. #--------------------------------------------------------------
  8. # gcc -m32 -Wall -Wextra test32.c bit32.s
  9. #--------------------------------------------------------------
  10. # rdi, rsi, rdx, rcx, r8, r9
  11. #--------------------------------------------------------------
  12.  
  13. #64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
  14. #==============================================================
  15. #rax             | eax           | ax            | al
  16. #rbx             | ebx           | bx            | bl
  17. #rcx             | ecx           | cx            | cl
  18. #rdx             | edx           | dx            | dl
  19. #rsi             | esi           | si            | sil
  20. #rdi             | edi           | di            | dil
  21. #rbp             | ebp           | bp            | bpl
  22. #rsp             | esp           | sp            | spl
  23. #r8              | r8d           | r8w           | r8b
  24. #r9              | r9d           | r9w           | r9b
  25. #r10             | r10d          | r10w          | r10b
  26. #r11             | r11d          | r11w          | r11b
  27. #r12             | r12d          | r12w          | r12b
  28. #r13             | r13d          | r13w          | r13b
  29. #r14             | r14d          | r14w          | r14b
  30. #r15             | r15d          | r15w          | r15b
  31.  
  32. # -------------------------------------------------------------
  33.  
  34. .text
  35. .type max_ind_asm, @function
  36. .global max_ind_asm
  37.  
  38. max_ind_asm:
  39.   #przenosimy argumenty do rejestrow ze stosu; int-y wiec co 4
  40.   movl  16(%esp), %edi    # zcwarty d
  41.   movl  12(%esp), %esi    # trzeci c
  42.   movl  8(%esp), %edx     # drugi b
  43.   movl  4(%esp), %ebx     # pierwszy a
  44.  
  45.   movl  $1, %eax          # na razie do wyniku zakladamy ze pierwszy element to maks
  46.   movl  %ebx, %ecx        # w %ecx bedziemy trzymac maksimum
  47.  
  48.   cmpl  %ecx, %edx        #sprawdzamy czy drugi wiekszy niz pierwszy (na razie maks)
  49.   jg    second_greater    #jak wiekszy to skaczemy
  50.   jmp   check_third       # jak nie wiekszy to sprawdzimy trzeci sobie
  51.  
  52. second_greater:
  53.   movl  $2, %eax          # teraz drugi element najwiekszy to zwrocimy ten indeks
  54.   movl  %edx, %ecx        # i uaktualniamy maksymalna
  55.  
  56. check_third:
  57.   cmpl  %ecx, %esi        # porownujemy trzeci arg z maksem
  58.   jg    third_greater
  59.   jmp   check_fourth
  60.  
  61. third_greater: #analogicznie
  62.   movl  $3, %eax
  63.   movl  %esi, %ecx
  64.  
  65. check_fourth:
  66.   cmpl  %ecx, %edi        # porownujemy czwarty arg z maksem
  67.   jg    fourth_greater
  68.   jmp   check_many        # skaczemy do sprawdzenia czy jest tylko jeden maks
  69.  
  70. fourth_greater:
  71.   movl  $4, %eax          #czwarty indeks najwiekszy
  72.   movl  %edi, %ecx        #przenosimy d do ecx
  73.  
  74. check_many:
  75.   cmpl  $1, %eax
  76.   je    check_without_first #sprawdzamy czy taki sam jest gdzies wartosc oprocz w pierwszym
  77.   cmpl  $2, %eax
  78.   je    check_without_second #te analogicznie
  79.   cmpl  $3, %eax
  80.   je    check_without_third
  81.   cmpl  $4, %eax
  82.   je    check_without_fourth
  83.   jmp   return_to_c
  84.  
  85. check_without_first:
  86.   cmpl  %edi, %ecx
  87.   je    return_zero
  88.   cmpl  %esi, %ecx
  89.   je    return_zero
  90.   cmpl  %edx, %ecx
  91.   je    return_zero
  92.   jmp   return_to_c
  93.  
  94. check_without_second:
  95.   cmpl  %edi, %ecx
  96.   je    return_zero
  97.   cmpl  %esi, %ecx
  98.   je    return_zero
  99.   cmpl  %ebx, %ecx
  100.   je    return_zero
  101.   jmp   return_to_c
  102.  
  103. check_without_third:
  104.   cmpl  %edi, %ecx
  105.   je    return_zero
  106.   cmpl  %ebx, %ecx
  107.   je    return_zero
  108.   cmpl  %edx, %ecx
  109.   je    return_zero
  110.   jmp   return_to_c
  111.  
  112. check_without_fourth:
  113.   cmpl  %ebx, %ecx
  114.   je    return_zero
  115.   cmpl  %esi, %ecx
  116.   je    return_zero
  117.   cmpl  %edx, %ecx
  118.   je    return_zero
  119.   jmp   return_to_c
  120.  
  121. return_zero:
  122.   movl  $0, %eax
  123.  
  124. return_to_c:
  125.   ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement