Lokalni promenne – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Lokalni promenne – Assembler – Fórum – Programujte.comLokalni promenne – Assembler – Fórum – Programujte.com

 

Honza0
Stálý člen
29. 6. 2007   #1
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
Honza0
Stálý člen
29. 6. 2007   #2
-
0
-

Omlouvam se, ze to tu mam dvakrat za sebou, ja to napsal jednou a pak dal editovat, zmenil nazev a vytvoril druhe vlakno :'(

Nahlásit jako SPAM
IP: ...–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
mylan40
Super člen
29. 6. 2007   #3
-
0
-

Neviem ci som to spravne pochopil, ale rozne premenne zaberaju rozne velke miesto, napr. 32-bitovy Integer zabera 4B, ale Short (typ vo VB.NET) - 16-bitovy len 2 bajty...

Nahlásit jako SPAM
IP: ...–
Honza0
Stálý člen
30. 6. 2007   #4
-
0
-

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...

Nahlásit jako SPAM
IP: ...–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
Laaca
~ Anonymní uživatel
225 příspěvků
30. 6. 2007   #5
-
0
-

Ne, instrukce PUSH/POP umí na zásobník ukládat/odebírat jak 16-bitové, tak 32-bitové hodnoty. 8-bitové neumí.

Nahlásit jako SPAM
IP: ...–
Honza0
Stálý člen
30. 6. 2007   #6
-
0
-

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 ;)...

Nahlásit jako SPAM
IP: ...–
NECIN DRUHYM TO, CO NECHCES, ABY ONI CINILI TOBE!
PUSH
~ Anonymní uživatel
1 příspěvek
29. 7. 2007   #7
-
0
-

> 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

Nahlásit jako SPAM
IP: ...–
O
~ Anonymní uživatel
17 příspěvků
31. 7. 2007   #8
-
0
-

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á).

Nahlásit jako SPAM
IP: ...–
vsman
~ Anonymní uživatel
8 příspěvků
23. 2. 2008   #9
-
0
-

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...

Nahlásit jako SPAM
IP: 89.173.13.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 180 hostů

Podobná vlákna

Lokalni promenna — založil BigBear

Lokalni extremy — založil Grav

Lokalni wiki — založil TuTi_fruTi

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý