Ahojte... mam prosbicku... nevi to snad nikdo z naseho rocniku a tak jsem se zkusim zeptat tu... kolik bajtu zabira na zasobniku lokalni promenna a proc?
Vsichni tvrdi, ze 4bajty, ale ucitel tvrdi, ze ne a nechce nam rict kolik a proc to tak je... nejvic mi to vrta hlavou... moc dekuju.
Fórum › Assembler
Lokalni promenne
Mno... jasne, ze ruzne promenne maji ruznou velikost, ale zasobnik pracuje pouze se 4bajtovymi hodnotami... takze pokud se lokalni promenne ukladaji na zasobnik, cili nekam "pod" esp, tak by meli zabirat 4bajty... ale jeste jsem polemizoval o tom, co jsem kdesi cetl, ale ted nevim kde... neco jakoze esp ukazuje na vrchol zasobniku (na parametry procedur atd.) a ebp ukazuje na dno zasobniku a ukazuje na lokalni promenne... z toho by na teto teoreticke urovni plynulo, ze kdyz budu mit v programu lokalni promennou, ze na zasobniku nezabere zadne misto, jelikoz na zasobniku vubec neni... ale ptal jsem se na to par lidi a vsichni rikali, ze to je porad zasobnik a tedy velikost techto lokalnich promennych je stale 4bajty... pze nam ale ucitel rikal, ze to tak neni, tak bych chtel nekde zjistit, jak to opravdu je...
Ja nerikam, ze neumi, jen na tom zasobniku zabiraji 4bajty... no ale i kdyby tam byli ulozeny jako 2bajtove, tak to taky neni bohuzel spravny vysledek, pze to jsem napsal v prvnim testu a bylo to taky spatne ;)...
> Vsichni tvrdi, ze 4bajty
Nebo vice: celociselny nasobek 4 :-D
> ale ucitel tvrdi, ze ne a nechce nam rict kolik a proc to tak je..
Soudruh ucitel je debyl :-D
> Ne, instrukce PUSH/POP umí na zásobník ukládat/odebírat jak 16-bitové, tak 32-bitové hodnoty. 8-bitové neumí.
Je to tak. V 32-bit segmentu lze PUSHovati 16-bit, ale nedela se to ... Posledni Intel CPU ktery podporoval 8-bitovy PUSH byl 8080 :-D
Lokální proměnné můžou zabírat místa kolik chceme, protože nemusíme používat PUSH/POP (ani se to nepoužívá), ale prostě vymezit místo v zásobníku: SUB ESP, [velikost lokálních proměnných] nebo použít na začátku instrukci ENTER a na konci LEAVE, která mimo jiné vymezí místo na lokální proměnné a přesune hodnotu v ESP do EBP, takže k lokálním proměnným můžem přstupovat dword ptr [EBP-4H] (první 4bytová proměnná).
Parametre funkcie zaberaju vzdy 4B. Lokalne premenne sa nevyberaju zo zasobnika s POP a tak moze mat i 1B. Polia zoberu zo zasobnika celu velkost toho pola, cize 'int n[10]' si ukusne 40B. Lenze mam taky dojem, ze i lokalne premmene sa zarovnavaju v zasobniku na 4B, pretoze citanie numerickych hodnot z pameti je rychlejsie z adres delitelnych 4. Niektore CPU dokonca nedokazu z neparnej adresy vobec citat data. Intel sa prisposobi, ale spomaluje to kod. Cize pre optimalizaciu kodu moze kompilator pre 1B premennu vyhradit 4B v zasobniku...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Lokalni promenna — založil BigBear
JS a lokální soubor — založil grump
Lokalni extremy — založil Grav
Lokalni wiki — založil TuTi_fruTi