NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

# Jan Potocki 2019

# Definicje numerow funkcji systemowych i ich parametrow
SYSEXIT = 60
SYSREAD = 0
SYSWRITE = 1
STDIN = 0
STDOUT = 1
STDERR = 2

# Stale
number = 5 # Wyraz ciagu (to mozna zmienic, reszty nie ruszac)

n_size = 8 # Rozmiar bufora

.bss
num: .space n_size # Bufor

.text
.globl main

fun:
# Funkcja obliczajaca wynik ciagu:
# x_0=2
# x_1=1
# x_2=3
# x_i=x_(i-2) - 2*x_(i-3)
# 1 parametr - wyraz ciagu (64-bit int), przekazywany przez rejestr
# Wynik zwracany przez rejestr

pushq %rbp # Wejscie do funkcji
movq %rsp, %rbp
pushq %rbx # Zachowanie wartosci rejestru rbx, poniewaz bedzie
# pozniej modyfikowany - a wg konwencji wywolan, rbx
# musi byc zachowany po stronie wywolanej funkcji

cmpq $0, %rdi # rdi - 1. parametr (zgodnie z konwencja wywolan)
je x0
cmpq $1, %rdi
je x1
cmpq $2, %rdi
je x2

# Rekurencja
# 1 wyraz
subq $2, %rdi # Obliczenie indeksu nowego wyrazu ciagu
pushq %rdi # Zachowanie wartosci rejestru rdi (wg konwencji
# wywolan - po stronie wywolujacego)
call fun # 1. wywolanie rekurencyjne
popq %rdi # Przywrocenie wartosci rejestru rdi
movq %rax, %rbx # Skopiowanie wyniku zwroconego w rejestrze rax
# do rejestru rbx

# 2 wyraz
subq $1, %rdi # Obliczenie indeksu nowego wyrazu ciagu
pushq %rdi # Zachowanie wartosci rejestru rdi (wg konwencji
# wywolan - po stronie wywolujacego)
call fun # 1. wywolanie rekurencyjne
popq %rdi # Przywrocenie wartosci rejestru rdi
movq $2, %rcx # Mnozenie 2. wyrazu przez 2
mulq %rcx

subq %rax, %rbx # Obliczenie roznicy

# Zwrocenie wyniku obliczen (przez rejestr rax, zgodnie z konwencja) i wyjscie
movq %rbx, %rax
jmp fun_end

# Zwrocenie wynikow dla poczatkowych wyrazow (przez rejestr rax)
x0:
movq $2, %rax
jmp fun_end

x1:
movq $1, %rax
jmp fun_end

x2:
movq $3, %rax

fun_end:
popq %rbx # Przywrocenie wartosci rejestru rbx
popq %rbp # Wyjscie z funkcji
ret

main:
movq $number, %rdi # Przekazanie parametru przez rejestr rdi
call fun # Wywolanie funkcji rekurencyjnej
movq %rax, num # Zapisanie w pamieci wyniku zwroconego przez rax

# Wypisanie wyniku
movq $SYSWRITE, %rax
movq $STDOUT, %rdi
movq $num, %rsi
movq $n_size, %rdx
syscall

# Koniec programu
movq $SYSEXIT, %rax
movq $0, %rdi
syscall
     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.