Pa meni je bilo zabavno da prčkam u asembleru, ali žestoko koristeći C biblioteku
)
Zamisli da moraš sam da implementiraš printf koristeći samo sistemski poziv write. Write ume samo da ispisuje niske. A da bi uopšte pozvao write, moraš da ubaciš u odgovarajući registar (RAX ako se dobro sećam) broj sistemskog poziva write, koji možeš proveriti u /usr/include/asm/unistd_64.h (za amd64 arhitekturu), i evo proverio sam, write je broj 1. Zatim, prvi argument je stdout, (oznaka za stdout je takođe 1, ja mislim i on ide u registar RDI). Zatim u registar RSI ide drugi argument sistemskog poziva, odnosno adresa stringa koji ispisuješ, a u registar RDX ide dužina stringa. Tek onda zoveš write
)
Mnogo je to dosadno i naporno. A to je samo da bi izvršio prost poziv write. U x86 arhitekturi je još gore, jer slično ovo radiš tako što guraš argumente obrnutim redosledom na stek, jer se u x86 svi argumenti prosleđuju preko steka, pa posle moraš da podesiš SP (stack pointer) na pređašnje stanje, odnosno, u ovom slučaju, da mu dodaš 12, jer je 4 bajta oznaka da je u pitanju stdout, još 4 adresa stringa, i 4 za dužinu. A zamisli da treba da parsiraš kontrolni string i da loviš argumente za printf. Pa to je čista tortura
)
Al kad koristiš C funkcije, nije asembler tako strašan
Asembler je kul, treba ga znati pomalo jer onda bolje kapiraš kako sve funkcioniše “ispod haube”, pa čistije razmišljaš kada radiš u C-u i C+±u. A u teoriji možeš i da pišeš optimizovane procedure koje možeš da pozivaš posle iz C-a. Problem s tim je što ako hoćeš portabilnost morao bi da dovoljno dobro poznaješ svaku arhitekturu koju želiš da podržiš. Kad kažem arhitekturu, to je petlja u petlji jer pod time mislim na arhitekturu procesora, ali i na arhitekturu OS-a. Dakle, Linux x86 asembler nije isto što i Windows x86 asembler, a ni jedno ni drugo ne liči mnogo na Linux amd64 asembler i tako dalje. Tako da se i to izbegava. Blj
Što se mene tiče, python čini javu zastarelom
) A ako nešto treba baš da bude brzo, napišeš python modul u C-u ili C+±u i svi srećni. A može i u asembleru
))
@timotije
Ah, jesam, al on isto tvrdi i za C++
)
Ipak, po mom mišljenju, C++ je prosto bolji od C-a, osim možda za programiranje kernela
)