1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- # Jan Potocki 2023
- # Wersja przystosowana do zbudowania jako PIE (Position Independent Executable)
-
- # Definicje numerow funkcji systemowych i ich parametrow
- SYSEXIT64 = 60
-
- # Stale okreslajace rozmiar przetwarzanych danych
- word_length = 8
-
- .global main
-
- # Segment niezainicjalizowanych danych
- .bss
- element: .space word_length
-
- # Segment zainicjalizowanych danych
- .data
- format_s: .asciz "%lu"
- format_p: .asciz "%lu\n"
-
- # Segment kodu
- .text
-
- main:
- # To jest potrzebne zeby printf i scanf nie konczyly sie segfaultem
- push %rbp
- mov %rsp, %rbp
-
- lea format_s(%rip), %rdi # Adresowanie wzgledem rip, wprowadzone w x86-64
- #mov $format_s, %rdi # ...tu nam wystarczy sam adres
- lea element(%rip), %rsi
- #mov $element, %rsi
- mov $0, %rax # Nie ma argumentow dla scanf() w rejestrach xmm
- call scanf
-
-
- lea element(%rip), %r8 # Tutaj trzeba jakis posredni rejestr...
- movq (%r8), %rdi # ...zeby odwolac sie do wartosci
- #movq element, %rdi
- call fibb
-
- lea format_p(%rip), %rdi
- #mov $format_p, %rdi
- mov %rax, %rsi # rax - wartosc zwrocona przez fibb()
- mov $0, %rax # Nie ma argumentow dla printf() w rejestrach xmm
- call printf
-
- mov $SYSEXIT64, %rax
- mov $0, %rdi
- syscall
|