Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //lab2
- .data
- STDIN=0
- STDOUT=1
- SYSREAD=0
- SYSWRITE=1
- SYSOPEN=2
- SYSCLOSE=3
- FREAD=0
- FWRITE=1
- FWRITECREATE=01101 #tworzenie,nadpisywanie,czytanie
- SYSEXIT=60
- EXIT_SUCCESS=0
- file_in1: .ascii "in1\0"
- file_in2: .ascii "in2\0"
- file_out: .ascii "out\0"
- .bss
- .comm in1, 1024 # ascii z pliku 1
- .comm in2, 1024 # ascii z pliku 2
- .comm value1, 1024 #wartosc z pliku 1
- .comm value2, 1024 #wartosc z pliku 2
- .comm sum, 1024 #suma
- .comm out, 1024 #ascii sumy
- .text
- .globl _start
- _start:
- //otworzenie pliku
- movq $SYSOPEN, %rax
- movq $file_in1, %rdi
- movq $FREAD, %rsi
- movq $0, %rdx
- syscall
- movq %rax, %r8 #w r8 uchwyt pliku in1
- //wczytanie danych
- movq $SYSREAD, %rax
- movq %r8, %rdi
- movq $in1, %rsi
- movq $1024, %rdx
- syscall
- mov %rax, %r9 #w r9 liczba danych z pliku in1
- //zamkniecie pliku
- movq $SYSCLOSE, %rax
- movq %r8, %rdi
- movq $0, %rsi
- movq $0, %rdx
- syscall
- //zapis ascii jako wartosci do bufora
- dec %r9 #bez znaku konca
- movq $-1, %r10 #licznik od poczatku
- savefile1:
- dec %r9
- inc %r10
- #bity 1,2
- movb in1(, %r9,1), %al #wczytanie ascii
- sub $'0',%al #zmiana na wartosc
- cmp $0, %r9 #czy koniec danych
- jle savebuffA
- #bity 3,4
- dec %r9
- movb in1(,%r9,1), %bl #wczytanie ascii
- sub $'0', %bl #zmiana na wartosc
- shl $2, %bl #przesuwam
- add %bl, %al #dodaje do wyniku
- cmp $0, %r9 #czy koniec danych
- jle savebuffA
- #bity 5,6
- dec %r9
- movb in1(,%r9,1), %bl #wczytanie ascii
- sub $'0', %bl #zmiana na wartosc
- shl $4, %bl #przesuwam
- add %bl, %al #dodaje do wyniku
- cmp $0, %r9 #czy koniec danych
- jle savebuffA
- #bity 7,8
- dec %r9
- movb in1(,%r9,1), %bl #wczytanie ascii
- sub $'0', %bl #odejmuje ascii
- shl $6, %bl #przesuwam
- add %bl, %al #dodaje do wyniku
- cmp $0, %r9 #czy koniec danych
- jle savebuffA
- savebuffA:
- movb %al, value1(,%r10,1) #zapis do bufora
- cmp $0, %r9 #czy koniec danych
- jg savefile1
- //Drugi plik
- second:
- //otworzenie pliku
- movq $SYSOPEN, %rax
- movq $file_in2, %rdi
- movq $FREAD, %rsi
- movq $0, %rdx
- syscall
- movq %rax, %r8 #kopia uchwytu do pliku
- //wczytanie danych
- movq $SYSREAD, %rax
- movq %r8, %rdi
- movq $in2, %rsi
- movq $1024, %rdx
- syscall
- mov %rax, %r9 #r9 liczba odczytanych danych
- //zamkniecie pliku
- #zamkniecie pliku
- movq $SYSCLOSE, %rax
- movq %r8, %rdi
- movq $0, %rsi
- movq $0, %rdx
- syscall
- //zapis ascii jako wartosci do bufora
- dec %r9 #pomijam koniec lini
- movq $-1, %r11 #licznik od poczatku
- savefile2:
- dec %r9
- inc %r11
- #bity 1,2
- movb in2(, %r9,1), %al #wczytanie ascii
- sub $'0',%al #dekodowanie
- cmp $0, %r9 #jezli jest co wczytaj
- jle savebuffB
- #bity 3,4
- dec %r9
- movb in2(,%r9,1), %bl #wczytanie ascii
- sub $'0', %bl #odejmuje ascii
- shl $2, %bl #przesuwam
- add %bl, %al #dodaje do wyniku
- cmp $0, %r9
- jle savebuffB
- #bity 5,6
- dec %r9
- movb in2(,%r9,1), %bl #wczytanie ascii
- sub $'0', %bl #odejmuje ascii
- shl $4, %bl #przesuwam
- add %bl, %al #dodaje do wyniku
- cmp $0, %r9
- jle savebuffB
- #bity 7,8
- dec %r9
- movb in2(,%r9,1), %bl #wczytanie ascii
- sub $'0', %bl #odejmuje ascii
- shl $6, %bl #przesuwam
- add %bl, %al #dodaje do wyniku
- cmp $0, %r9
- jle savebuffB
- savebuffB:
- movb %al, value2(,%r11,1) #zapis do bufora
- cmp $0, %r9
- jg savefile2
- #dodanie wartosci
- clc #czysczenie flage przeniesienia
- pushfq #umieszczenie rejestru z flagami na stosie
- movq $0, %r8 #licznik petli
- add:
- movq value1(,%r8,8), %rax
- movq value2(,%r8,8), %rbx
- popfq #pobieram rejestr flag
- adc %rbx,%rax #dodaje z przeniesieniem
- jnc s_end
- pushfq #umieszczam flagi na stosie
- n_end:
- movq %rax, sum(,%r8,8) #zapis wyniku
- add $8, %r8 #skok co 8
- cmp $256,%r8
- jl add
- s_end:
- pushfq
- cmp $0, %rax #jezeli wynik 0 i brak przeniesienia
- jne n_end
- buffvalue:
- #zamiana na osiem
- movq %r8, %r10 #licznik out
- movq $0, %r9 #licznik sum
- change:
- mov sum(,%r9,4), %eax #kopiuje 4 bajty wyjsciowe
- mov %eax, %ebx
- mov %eax, %ecx
- mov %eax, %edx
- mov %eax, %ebp
- #rozdzielam liczbe na cztery
- shr $3, %ecx #przesuwam w prawo o 3
- shr $6, %edx #przesuwam w prawo o 6
- shr $9, %ebp #przesuwam w prawo o 9
- and $0b111, %ebx #3 bity
- and $0b111, %ecx #3 bity
- and $0b111, %edx #3 bity
- and $0b111, %ebp #3 bity
- add $'0', %ebx
- add $'0', %ecx #zamiana na ascii
- add $'0', %edx
- add $'0', %ebp
- mov %ebx, out(,%r8,1)
- dec %r8
- mov %ecx, out(,%r8,1)
- dec %r8
- mov %edx, out(,%r8,1)
- dec %r8
- mov %ebp, out(,%r8,1)
- dec %r8
- inc %r9
- cmp %r10,%r9
- jl change
- #dodanie znaku konca lini
- inc %r10
- movq %r10, %r8
- movb $0x0A, out(, %r8, 1)
- //tworzenie pliku
- movq $SYSOPEN, %rax
- movq $file_out, %rdi
- movq $FWRITECREATE, %rsi
- movq $0666, %rdx
- syscall
- movq %rax, %r8 #uchwyt pliku
- //zapis
- movq $SYSWRITE, %rax
- movq %r8, %rdi
- movq $out, %rsi
- movq %r10, %rdx
- syscall
- //zamykanie
- #zamkniecie pliku
- movq $SYSCLOSE, %rax
- movq %r8, %rdi
- movq $0, %rsi
- movq $0, %rdx
- syscall
- koniec:
- movq $SYSEXIT, %rax
- movq $EXIT_SUCCESS, %rdi
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement