Naopak delat to takhle mi prijde lepsi, protoze je to obecnejsi a HW jednodussi. Na ARMu je takhle vlastnost taky. Kazda skokova instrukce ma ve svem operacnim kodu `L-bit', kterej kdyz je 1, zpusobi ze adresa nasledujici instrukce se pri provadeni skoku presune do tzv. Link-registru. To je uplne normalni register, ktery se da pouzivat na vypocty, pokud zrovna nedrzi adresu navratu. Obvykle se pak tento registr ulozi na zasobnik az ve volane funkci (na to je instrukce STMDA ktera umi ulozit podmnozinu registru kterou si clovek vybere pomoci bitove masky — takze 1 instrukci se ulozi navratova adresa i registry ktere by funkce jinak prepsala a jeste se dekrementuje ukazatel zasobniku, coz neni fixni registr ale dalsi parametr te instrukce, takze zasobniku muzu mit vic, kdybych to potreboval)
Vyhoda je takova, ze funkce ktere uz dal nic nevolaji nemusi tenhle registr davat na zasobnik, coz usetri trochu prenosu po sbernici.
Krom toho je CPU jednodussi protoze nemusi mit explicitni instrukce PUSH, POP a CALL.
Me to prijde celkem elegantni. Jeste jsem zapomel dodat ze navrat z funkce se provadi instrukci LDMIB, ktera vyzvedne registry opet podle masky a inkrementuje ukazatel zasobniku.
Tim ze misto link registru v masce uvedeme program counter (nebo jak se na intelu rika instruction pointer) tak se tim provede navrat z procedury.

