123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
-
-
-
- SYSEXIT64 = 60
- SYSREAD = 0
- SYSWRITE = 1
- STDIN = 0
- STDOUT = 1
-
-
- num_length = 256
-
- word_length = 8
- buf_length = num_length * 2
- num_words = num_length / word_length
- buf_words = buf_length / word_length
-
- .global main
-
-
- .bss
-
- liczba1: .space num_length
- liczba2: .space num_length
- wynik: .space buf_length
-
-
- .text
-
- main:
-
- petla:
- mov $SYSREAD, %rax
- mov $STDIN, %rdi
- mov $liczba1, %rsi
- mov $buf_length, %rdx
- syscall
-
-
-
-
-
-
- cmp $buf_length, %rax
- jl koniec
-
- xor %rsi, %rsi
-
-
- wyzeruj:
- movq $0, wynik(, %rsi, 8)
- inc %rsi
- cmp $buf_words, %rsi
- jl wyzeruj
-
- xor %rsi, %rsi
-
-
- petla1:
- xor %rcx, %rcx
-
-
- mov $0, %r8
- clc
- pushf
-
- xor %rdi, %rdi
-
-
- petla2:
- movq liczba1(, %rsi, 8), %rax
- mulq liczba2(, %rdi, 8)
-
- mov %rdi, %r9
- add %rsi, %r9
-
-
- popf
- adc %rcx, %rax
- pushf
-
-
- cmp $1, %r8
- je ustaw_cf1
-
- clc
- jmp dodaj_wynik
-
- ustaw_cf1:
- stc
-
-
-
- dodaj_wynik:
- adcq %rax, wynik(, %r9, 8)
-
-
- jc zapisz_cf
-
- mov $0, %r8
- jmp dalej
-
- zapisz_cf:
- mov $1, %r8
-
- dalej:
- mov %rdx, %rcx
-
- inc %rdi
- cmp $num_words, %rdi
- jl petla2
-
-
-
- inc %r9
-
- popf
- adc $0, %rcx
-
-
- cmp $1, %r8
- je ustaw_cf2
-
- clc
- jmp dodaj_najstarsze
-
- ustaw_cf2:
- stc
-
- dodaj_najstarsze:
- adcq %rcx, wynik(, %r9, 8)
-
- inc %rsi
- cmp $num_words, %rsi
- jl petla1
-
- mov $SYSWRITE, %rax
- mov $STDOUT, %rdi
- mov $wynik, %rsi
- mov $buf_length, %rdx
- syscall
-
- jmp petla
-
-
- koniec:
- mov $SYSEXIT64, %rax
- mov $0, %rdi
- syscall
|