51 lines
1.2 KiB
ArmAsm
51 lines
1.2 KiB
ArmAsm
# 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
|