«« ( Date ) »» // «« ( Thread ) »» // ir3sp - 2009

Re: jos pitanja u vezi pC-a

by Ivan Milenkovic
utorak, 13. januar 2009 - 02:08.

Unapred se izvinjavam zbog opsirnosti :)

1) pristup podacima u dinamickoj zoni memorije:

...
SIM1: DC 0 ; pretpostavimo da ovaj podatak ide u dinamicku zonu
...

da li programer treba da pise

ADD SIM1, 5, 5

ili
ADD (SIM1), 5, 5
?

Iz vaseg odgovora sledi da programer treba da pise na drugi nacin, ali ovo nije u saglasnosti sa sintaksom pC-a, gde se navodi da je
(SIM) = val(val(sim)), dok je cilj pristupiti direktno memorijskoj lokaciji u dinamickoj zoni

da li mozemo da usvojimo da programer pise na prvi nacin, pri cemu bi asembler to implicitno zbog ogranicenja pC-a prevodio u indirektno adresiranje sa dodatnom instrukcijom ucitavanja adrese (nesto poput MOV 7, #SIM)?

2) visestruki pristupi dinamickoj zoni memorije

ako imamo vise simbola (recimo SIM1, SIM2, SIM3) koji su po pretpostavci svi smesteni u dinamicku zonu memorije,
iz opisa pCa (na strani 1.42) sledi da je moguce napisati instrukciju npr.

ADD SIM1, SIM2, SIM3

da bi ovo bilo moguce prevesti moramo da odvojimo 3 memorijske lokacije u koje cemo smestiti adrese ovih simbola. Iz ovoga sledi da za fiksnu zonu u memoriji imamo samo 5 lokacija na raspolaganju ???

3) indirektno pristupanje dinamickoj memoriji

Da li treba zabraniti programeru da indirektno referencira simbole koje je rezervisao u dinamickoj zoni memorije? ovakav nacin pristupa bi napravio mnogo problema, jer bi se za svako koriscenje simbola na ovaj nacin morale umetati po 2 instrukcije. U opstem slucaju, kada bi iskoristili 3 ovakva adresiranja, slicno prethodnom primeru (recimo ADD, (SIM1), (SIM2), (SIM3) ), morali bismo da odvojimo 6 memorijskih lokacija u fiksnoj zoni, sto je cini neupotrebljivom za ostale potrebe.

4) Forward reference i backpatching

Najveci problem na koji sam do sada naisao vezan je za obracanje unapred. Ako upotrebimo simbol pre nego sto je definisan, potrebno je da napravimo odgovarajuci zapis u tabeli obracanja unapred, kao sto je opisano na predavanjima. Medjutim, u tom trenutku ne mozemo znati da li se taj podatak nalazi u fiksnoj ili dinamickoj zoni memorije, pa samim tim ni da li je potrebno odvojiti 4bita u postojecoj reci instrukcije ili 32 bita za umetnutu MOV instrukciju. Kako od ovoga zavise i relokacije koje se mogu pojaviti pre same definicije simbola, backpatching postaje previse slozen.

Da li postoji neko drugo resenje kako bi se izbegao ovaj problem?

Pozdav,
Ivan




________________________________
From: Sasa Stojanovic <stojsasa@yahoo.com>
To: sistemsko_programiranje ETF <ir3sp@rti.etf.bg.ac.yu>
Sent: Sunday, January 4, 2009 10:10:07 PM
Subject: Re: [ir3sp] Pitanja u vezi projekta - Asemblerske direktive


Uvesti dva tipa DAT segmenta:
DAT - lokacije koje se mogu adresirati i direktno i indirektno (prvih 8)
DATI - lokacije kojima se moze pristupati samo indirektno

Obezbijediti da se izgenerise potrebni kod za indirektni pristup (moguce je pretpostaviti da je lokacija sa adresom 7 rezervisana za tu namjenu, tako da za segment prvog tipa ostaje prvih 7 lokacija).

Pozdrav,
Sasa