Магацинска (стек) меморија

Стек меморија (магацинска меморија) је безадресна регистарска меморија са секвенцијалним приступом. Код ове меморије регистри формирају једнодимензиони низ у коме су суседни регистри повезани колима за паралелни пренос бинарних речи тако да се у њима упис и читање врши по принципу „последњи уписан – први прочитан“ (LIFO). Другим речима, ако је неки низ података уписан у стек, тада ће при читању њихов редослед бити обрнут.

Упис у стек и читање са стека врши се само на једном месту, у горњој ћелији која се назива врх стека, тако да при коришћењу стека нема потребе задавати адресе. При упису података у стек садржаји свих регистара стека померају се у суседне ћелије за једно место наниже, а при читању се померају за једно место навише. Операција уписа назива се push, а операција читања pop.

stek

Стек се користи код израчунавања вредности аритметичких израза, при реализацији програмских преводилаца и у многим другим случајевима. У џепним калкулаторима користи се унутрашњи стек за израчунавање вредности аритметичких израза. Коришћењем стека за памћење операнада и резултата могуће је реализовати процесор у коме инструкције немају адресни део, тзв. безадресне инструкције.

Меморија типа реда

red

Меморија типа реда јесте регистарска меморија слична стеку, само се подаци у њу уписују и из ње читају по принципу „први уписан – први прочитан“ (FIFO – First In – First Out). Користи се при опслуживању по принципу редова чекања.

Реализација стека у оперативној меморији

Осим реализације стека помоћу регистара, врло често се стек реализује и у оперативној меморији. Ради тога се у процесор уводи посебан адресни регистар за врх стека који се назива показивач стека.

Код овакве реализације стека при упису и читању стеку се приступа на основу садржаја показивача стека, који показује на врх стека преко његове меморијске адресе. При томе нема физичког померања садржаја стека, већ се само подешава нови садржај показивача стека повећањем или смањењем адресе за 1.

реализација стека у оперативној меморији

реализација стека у оперативној меморији

Показивач стека садржи адресу врха стека. У случају да стек расте ка вишим локацијама, извршавање инструкција push и pop одвија се на следећи начин:

push: – садржај регистра SP представља адресу на коју се уписује податак. Тако да се најпре на ту адресу упише податак, а после се врши ажурирање регистра SP (најчешће се врши инкрементирање), тако да се извршавање инструкције push своди на извршавање следеће две операције:

mov [SP], Rn (M[SP]<—Rn) – на локацију на коју показује SP (на локацију чија адреса је дата у SP) упиши садржај регистра Rn

SP++ - ажурирање регистра SP

На сликама је приказан изглед меморије/стека пре и после уписа на стек:

изглед стека пре уписа

изглед стека пре уписа

изглед стека после уписа

изглед стека после уписа

pop: – сада се најпре ажурира садржај регистра SP како би показивао на последњи уписан податак, па се тек после чита податак. Зато се извршавање инструкције pop своди на извршавање следеће две операције:

SP-- - ажурирање регистра SP

mov data, [SP]     (Rn <— M[SP]) – садржај меморијске локације на коју показује SP пребаци у регистар Rn

на сликама је приказан изглед меморије/стека пре и после читања са стека:

изглед стека пре читања

изглед стека пре читања

изглед стека после читања

изглед стека после читања

Код процесора Интелове фамилије 80×86 за реализацију стека у оперативној меморији користе се два регистра: регистар SS (стек сегмент регистар) који чува адресу прве локације у стеку (јер је стек, у ствари један од сегмената меморије) и регистар SP који чува адресу прве слободне локације у стеку, односно локације на коју се инструкцијом push уписује податак који се смешта на стек.

Уколико је садржај регистара SS и SP исти, то значи да је стек празан! Код ових процесора SP чува адресу последње заузете локације у стеку, а стек расте ка мањим локацијама, тако да извршавање инструкција push и pop код Интелове фамилије процесора изгледа мало другачије:

Редослед операција приликом уписа:

изглед стека пре уписа

изглед стека пре уписа

SP <— SP -1       умањи SP

M[SP]<—Rn      на локацију на коју показује SP (на локацију чија адреса је дата у SP) упиши садржај регистра Rn
изглед стека после уписа

изглед стека после уписа

Редослед операција приликом читања:

изглед стека пре читања

изглед стека пре читања

Rn <— M[SP]      садржај меморијске локације на коју показује SP пребаци у регистар Rn

SP <— SP +1       увећај SP
изглед стека после читања

изглед стека после читања

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s