Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- SYSREAD = 0
- SYSWRITE = 1
- SYSOPEN = 2
- SYSCLOSE = 3
- SYSEXIT = 60
- EXIT_SUCCESS = 0
- FREAD = 0
- FWRITE = 1
- PERSMISSIONS = 0644
- BUFF = 1024
- POCZATEK_LICZB = 0x30
- PODSTAWA_WE = 4
- PODSTAWA_WY = 2
- file_liczba1: .ascii "liczba1.txt\0"
- file_liczba2: .ascii "liczba2.txt\0"
- file_wynik: .ascii "wynik.txt\0"
- .bss
- .comm liczba1, 1024
- .comm liczba2, 1024
- .comm wartosc1, 256
- .comm wartosc2, 256
- .comm dekodowanaLiczba1, 2049
- .comm dekodowanaLiczba2, 2049
- .text
- .global main
- main:
- # ------- CZYSZCZENIE BUFFORA -------
- mov $256, %r8
- mov $0, %al
- czysc:
- dec %r8
- mov %al, wartosc1(, %r8, 1)
- mov %al, wartosc2(, %r8, 1)
- cmp $0, %r8
- jg czysc
- # ------- PIERWSZA LICZBA ---------
- # -- OTWARCIE PLIKU --
- mov $SYSOPEN, %rax
- mov $file_liczba1, %rdi
- mov $FREAD, %rsi
- mov $0, %rdx
- syscall
- mov %rax, %r10
- # -- WCZYTANIE LICZBY --
- mov $SYSREAD, %rax
- mov %r10, %rdi # w R10 jest wskaznik do otwartego pliku
- mov $liczba1, %rsi # zawartość trafi do bufora in
- mov $BUFF, %rdx
- syscall
- mov %rax, %r8
- # -- ZAMKNIECIE PLIKU --
- mov $SYSCLOSE, %rax
- mov %r10, %rdi # wskaznik do otwartego wciąż pliku
- mov $0, %rsi
- mov $0, %rdx
- syscall
- # ------- DRUGA LICZBA ---------
- # -- OTWARCIE PLIKU --
- mov $SYSOPEN, %rax
- mov $file_liczba2, %rdi
- mov $FREAD, %rsi
- mov $0, %rdx
- syscall
- mov %rax, %r10
- # -- WCZYTANIE LICZBY --
- mov $SYSREAD, %rax
- mov %r10, %rdi # w R10 jest wskaznik do otwartego pliku
- mov $liczba2, %rsi # zawartość trafi do bufora in
- mov $BUFF, %rdx
- syscall
- mov %rax, %r8
- # -- ZAMKNIECIE PLIKU --
- mov $SYSCLOSE, %rax
- mov %r10, %rdi # wskaznik do otwartego wciąż pliku
- mov $0, %rsi
- mov $0, %rdx
- syscall
- # ------- KONIEC WCZYTYWANIA LICZB --------
- # ------- DEKODOWANIE WARTOSCI -------
- # DEKODOWANIE PIERWSZEJ LICZBY
- dec %r8
- mov $256, %r9
- dekoduj:
- dec %r8
- dec %r9
- # Dekodowanie pierwszych 2 bitow
- mov liczba1(, %r8, 1), %al
- sub $POCZATEK_LICZB, %al
- cmp $0, %r8
- jle zapisz
- # Dekodowanie kolejnych 2 bitow
- dec %r8
- mov liczba1(, %r8, 1), %bl
- sub $POCZATEK_LICZB, %bl
- shl $2, %bl # przesuniecie bitowe w lewo
- add %bl, %al
- cmp $0, %r8
- jle zapisz
- # Zdekodowanie kolejnych 2 bitów
- dec %r8
- mov liczba1(, %r8, 1), %bl
- sub $POCZATEK_LICZB, %bl
- shl $4, %bl
- add %bl, %al
- cmp $0, %r8
- jle zapisz
- # Zdekodowanie kolejnych 2 bitów
- dec %r8
- mov liczba1(, %r8, 1), %bl
- sub $POCZATEK_LICZB, %bl
- shl $6, %bl
- add %bl, %al
- cmp $0, %r8
- jle zapisz
- # Zapisywanie wartosci do nowego bufora
- zapisz:
- mov %al, wartosc1(, %r9, 1)
- cmp $0, %r8
- jg dekoduj
- # Konwersja na binarny
- mov $256, %r8
- mov $2047, %r9
- dekoduj_wczytaj:
- dec %r8
- mov wartosc1(, %r8, 1), %al
- mov $8, %r10
- dekoduj_petla:
- mov %al, %bl
- and $1, %bl
- add $POCZATEK_LICZB, %bl
- mov %bl, dekodowanaLiczba1(, %r9, 1)
- shr $1, %rax
- dec %r9
- dec %r10
- cmp $0, %r10
- jg dekoduj_petla
- cmp $0, %r8
- jg dekoduj_wczytaj
- # DEKODOWANIE DRUGIEJ LICZBY
- dec %r8
- mov $256, %r9
- dekoduj_liczba2:
- dec %r8
- dec %r9
- # Dekodowanie pierwszych 2 bitow
- mov liczba2(, %r8, 1), %al
- sub $POCZATEK_LICZB, %al
- cmp $0, %r8
- jle zapisz_liczba2
- # Dekodowanie kolejnych 2 bitow
- dec %r8
- mov liczba2(, %r8, 1), %bl
- sub $POCZATEK_LICZB, %bl
- shl $2, %bl # przesuniecie bitowe w lewo
- add %bl, %al
- cmp $0, %r8
- jle zapisz_liczba2
- # Zdekodowanie kolejnych 2 bitów
- dec %r8
- mov liczba2(, %r8, 1), %bl
- sub $POCZATEK_LICZB, %bl
- shl $4, %bl
- add %bl, %al
- cmp $0, %r8
- jle zapisz_liczba2
- # Zdekodowanie kolejnych 2 bitów
- dec %r8
- mov liczba2(, %r8, 1), %bl
- sub $POCZATEK_LICZB, %bl
- shl $6, %bl
- add %bl, %al
- cmp $0, %r8
- jle zapisz_liczba2
- # Zapisywanie wartosci do nowego bufora
- zapisz_liczba2:
- mov %al, wartosc2(, %r9, 1)
- cmp $0, %r8
- jg dekoduj
- # Konwersja na binarny
- mov $256, %r8
- mov $2047, %r9
- dekoduj_wczytaj_liczba2:
- dec %r8
- mov wartosc2(, %r8, 1), %al
- mov $8, %r10
- dekoduj_petla_liczba2:
- mov %al, %bl
- and $1, %bl
- add $POCZATEK_LICZB, %bl
- mov %bl, dekodowanaLiczba2(, %r9, 1)
- shr $1, %rax
- dec %r9
- dec %r10
- cmp $0, %r10
- jg dekoduj_petla_liczba2
- cmp $0, %r8
- jg dekoduj_wczytaj_liczba2
- # ------ KONIEC DEKODOWANIA -------
- # ------- ZAPISANIE WYNIKU --------
- # Otwarcie pliku
- mov $SYSOPEN, %rax
- mov $file_wynik, %rdi
- mov $FWRITE, %rsi
- mov $0644, %rdx
- syscall
- mov %rax, %r8
- # Zapis bufora do pliku
- movq $2048, %r9
- movb $0x0A, dekodowanaLiczba1(, %r9, 1)
- mov $SYSWRITE, %rax
- mov %r8, %rdi
- mov $dekodowanaLiczba1, %rsi
- mov $2049, %rdx
- syscall
- # Zamknięcie pliku
- mov $SYSCLOSE, %rax
- mov %r8, %rdi
- mov $0, %rsi
- mov $0, %rdx
- syscall
- mov $SYSEXIT, %rax
- mov $EXIT_SUCCESS, %rdi
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement