Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .data
- STDIN = 0
- STDOUT = 1
- SYSEXIT = 1
- SYSREAD = 3
- SYSWRITE = 4
- LENGTH = 65026
- .section .bss
- .comm text, 65026
- .section .text
- .globl _start
- _start:
- movl $SYSREAD, %eax
- movl $STDIN, %ebx
- movl $text, %ecx
- movl $LENGTH, %edx
- int $0x80
- movl $0, %eax # zerowanie wszystkich bajtów, bo później nie wszędzie używam 4
- movl $0, %ebx
- movl $0, %ecx
- movl $0, %edx
- movl $2, %esi # bo 2 pierwsze bajty slużż jako informacja
- movb text(,%edi,1), %cl # ilość liczb
- movl %ecx, %esp # sortowanie bąbelkowe - tyle serii co długość liczby
- inc %edi
- movb text(,%edi,1), %bl # dlugość liczb
- sort:
- # ponowne wczytanie ilości liczb - kolejne sprawdzenia
- movl $0, %edi
- movb text(,%edi,1), %cl # ilość liczb
- loop:
- # porównanie liczb
- movl $-1, %edx # liczę od 0, nie 1
- nextnumber:
- dec %ecx # zmiejszam ilość pozostałych liczb do przestawienia
- cmp $0, %ecx
- je endloop
- movl %edx, %edi # edx - fix dla wskaźnika
- addl %ebx, %edi
- movl %edi, %edx
- jmp compare
- lowerbyte:
- subl %ebx, %edi # odejmuję dodaną długość przy porównaniu
- dec %edi
- compare:
- movb text(%esi,%edi,1), %al
- addl %ebx, %edi
- cmp text(%esi,%edi,1), %al
- ja change # wcześniejsza liczba jest większa -> zamieniam
- je lowerbyte # bajty są równe, sprawdzam młodsze
- jmp nextnumber # późniejsza liczba jest większa, więc przechodzę dalej
- # zamiana liczb miejscami
- change:
- movl %edx, %edi # korzystam z fix'u wskaznika zapisanego wcześniej
- movl %ebx, %ebp # zapisuję ilość bitow do zmiany
- changeallbytes:
- movb text(%esi,%edi,1), %al # przechowanie wartości
- addl %ebx, %edi # przestawienie wskaźnika
- movb text(%esi,%edi,1), %ah # przechowanie wartości
- movb %al, text(%esi,%edi,1) # załadowanie wartości
- subl %ebx, %edi # przestawienie wskaźnika
- movb %ah, text(%esi,%edi,1) # załadowanie wartości
- dec %ebp # przechodzę bit niżej
- dec %edi
- cmp $0, %ebp # sprawdzam czy koniec
- ja changeallbytes
- jmp nextnumber
- endloop:
- dec %esp
- cmp $0, %esp
- ja sort
- # odwrócić liczby ??
- # NIE ZROBIONE
- movl $SYSWRITE, %eax
- movl $STDOUT, %ebx
- movl $text, %ecx
- movl $LENGTH, %edx
- int $0x80
- movl $SYSEXIT, %eax
- int $0x80
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement