Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .section .data
  2. STDIN = 0
  3. STDOUT = 1
  4. SYSEXIT = 1
  5. SYSREAD = 3
  6. SYSWRITE = 4
  7. LENGTH = 65026
  8.  
  9. .section .bss
  10. .comm text, 65026
  11.  
  12. .section .text
  13.  
  14. .globl _start
  15. _start:
  16.  
  17.  
  18.   movl $SYSREAD, %eax
  19.   movl $STDIN, %ebx
  20.   movl $text, %ecx
  21.   movl $LENGTH, %edx
  22.   int  $0x80
  23.  
  24.   movl $0, %eax
  25.   movl $0, %ebx
  26.   movl $0, %ecx
  27.   movl $0, %edx
  28.   movl $2, %esi # bo 2 pierwsze bajty sluza jako informacja
  29.  
  30.   movb text(,%edi,1), %cl # ilość liczb
  31.   movl %ecx, %esp # sortowanie babelkowe - zawsze robiony najgorszy przypadek
  32.   inc %edi
  33.   movb text(,%edi,1), %bl # dlugość liczb
  34.  
  35. sort:
  36.   # ponowne wczytanie ilości liczb - kolejne sprawdzenia
  37.   movl $0, %edi
  38.   movb text(,%edi,1), %cl # ilość liczb
  39.  
  40. loop:
  41.   # porównanie liczb
  42.   movl $-1, %edx # liczę od 0, nie 1
  43. nextnumber:
  44.   dec  %ecx # zmiejszam ilość pozostałych liczb do przestawienia
  45.   cmp  $0, %ecx
  46.   je   endloop
  47.  
  48.   movl %edx, %edi # edx - fix dla wskaźnika
  49.   addl %ebx, %edi
  50.  
  51.   movl %edi, %edx
  52.   jmp  compare
  53.  
  54. lowerbyte:
  55.   subl %ebx, %edi # odejmuję dodaną długość przy porównaniu
  56.   dec  %edi
  57.  
  58. compare:
  59.   movb text(%esi,%edi,1), %al
  60.   addl %ebx, %edi
  61.   cmp  text(%esi,%edi,1), %al
  62.   ja   change   # wcześniejsza liczba jest większa -> zamieniam
  63.   je   lowerbyte  # bajty są równe, sprawdzam młodsze
  64.   jmp  nextnumber  # późniejsza liczba jest większa, więc przechodzę dalej
  65.  
  66.  
  67.   # zamiana liczb miejscami
  68. change:
  69.   movl %edx, %edi # fix wskaznika
  70.   movl %ebx, %ebp # ilosc bitow do zmiany
  71. changextimes:
  72.   movb text(%esi,%edi,1), %al # przechowanie wartosci
  73.   addl %ebx, %edi # przestawienie wskaznika
  74.   movb text(%esi,%edi,1), %ah # przechowanie wartosci
  75.   movb %al, text(%esi,%edi,1) # zaladowanie wartosci
  76.   subl %ebx, %edi # przestawienie wskaznika
  77.   movb %ah, text(%esi,%edi,1) # zaladowanie wartosci
  78.  
  79.   dec  %ebp # przechodze bit nizej
  80.   dec  %edi
  81.   cmp  $0, %ebp # sprawdzam czy koniec
  82.   ja   changextimes
  83.   jmp  nextnumber
  84.  
  85. endloop:
  86. dec  %esp
  87. cmp  $0, %esp
  88. ja   sort
  89.  
  90. # odwrócić liczby ??
  91. # NIE ZROBIONE
  92.  
  93.   movl $SYSWRITE, %eax
  94.   movl $STDOUT, %ebx
  95.   movl $text, %ecx
  96.   movl $LENGTH, %edx
  97.   int  $0x80
  98.  
  99.  
  100.  
  101.   movl $SYSEXIT, %eax
  102.   int  $0x80
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement