%include "rw32-2018.inc" section .data ; Strom k zpracovani ; Kazdy uzel stromu pozostava z 32b cisla se znamenkem a seznamem ukazatelu na nasledovniky, ; v jazyce C by mal nasledovnou deklaraci: ; struct tree_node { ; int32_t value; ; struct tree_node *children[] ; } ; Pocet deti neni pevne stanoven, seznam ukazatelov je ukoncen nulou (ukazatel NULL). ; Ukazatel "tree" ukazuje na "struct tree_node" reprezentujici koren uzlu. tree dd -50,$+20,$+28,$+36,0,94,0,29,0,21,0 ; Uvedeny strom obsahuje 4 uzly, koren (-50,$+20,$+28,$+36,0 == value -50 + 3 ukazatele + NULL) ; a tri deti (94,0 29,0 21,0) krere jsou listovymi uzly a nemaji zadne nasledniky. ; Je mozne jej vygenerovat pomoci skriptu ./tree_gen.py -f 3 -d 2 -s random section .text CMAIN: ; Ukol: doplnte volani funkce ProcessNode a vypis vysledku xor eax, eax ret ; Ukol: naimplementujte funkci ProcessNode ktera zpracuje jeden uzel stromu ; Vstup: Ukazatel na uzel k spracovani ; Vystup: Maximalni ohodnoceni cesty od daneho uzlu k nekteremu listu ; Algoritmus: 1, Jestlize je uzel listovy (nema nasledniky), vrati hodnotu uzlu. ; 2, Jestlize ma uzel deti, na kazdy rekurzivne vola ProcessNode. ; Vrati maximalni ziskanou hodnotu + hodnotu uzlu (seba). ; Volaci konvence: 1, Vstup je predan parametrem na zasobniku. ; 2, Vystup je predan v registru EAX. ; 3, Zasobnik uklizi volajici. ; 4, Pouzite registry zalohuje volany. ; Pozn.: Nezapomente na zasobnikovy ramec. ProcessNode: ret