pointerová aritmetika

Úvodní kurz překladačů se soustřeďuje zejména na teoretické i praktické základy konstrukce přední části překladače. Součástí předmětu je i cvičení zaměřující se na základy práce s nástroji pro konstrukci překladačů. Po absolvování tohoto kurzu bude posluchač schopen sestrojit vlastní překladač do mezikódu nebo jiného jazyka.
matejcik
Matfyz(ák|ačka) level I
Příspěvky: 7
Registrován: 29. 8. 2006 10:20

pointerová aritmetika

Příspěvek od matejcik »

nějak jsem si na cvičení nezapamatoval/nepochopil jak s tím, tak se ptám tady.

situace:

Kód: Vybrat vše

type babicka = record a,b,c:integer end;
procedure ahoj (var babi:babicka)
begin
  babi.c := 7;
end;
jak vypadá vygenerovaný assembler? já si ho představuji zhruba takhle:

Kód: Vybrat vše

LLDP [-1] // adresa pointeru na stacku
ADDP (2) // offset položky c
LDLITI [666] // hodnota "7"
XSTI
jenže instrukce ADDP nebere parametr, resp. přičítá int ze zásobníku. čili bych potřeboval nějakou dvojku, kterou jsem si vymyslel, dostat na zásobník.
jak na to? napadá mě vytvořit si nový literál speciálně pro tento případ. nebo si založit nový int a n-krát k němu přičítat jedničku, kterou máme slíbenou ze symbolových tabulek (což je ale poměrně debilní)

navíc zrovna ty MOA soubory k testům na tohle (20-22) jsou zjevně z minulého roku, ten kód v nich vypadá že pracuje s poli a nic moc se z toho vyčíst nedá.
nebo máte někdo správné MOA k tomu?
JiriD
Matfyz(ák|ačka) level I
Příspěvky: 44
Registrován: 2. 2. 2008 09:35
Typ studia: Informatika Bc.

Re: pointerová aritmetika

Příspěvek od JiriD »

Jenom bych chtěl upozornit, že v testech 20-23 nejsou recordy "vareny".
To znamená, že se před voláním funkce kopírujou jako parametr.

"Vareny" recordy jsou jenom v testu 1 a 41.

V testu 1 se kopiruji jenom cely recordy.. staci pouzit metodu one() pouzivanou ve forcyklu

V testu 41 uz se pristupuje k jednotlivym polozkam, recordu
..podle moa k testum si opravdu ke kazde polozce recordu pamatuju i jeji offset (reprezentace 3intoveho recordu obsahuje 9 intu)
Wenn ich morgen meinem Gott gegenüberstehe, kann ich sagen:
Ich bin unschuldig,
ich habe niemanden betrogen,
ich habe niemandem weh getan,
ausser mir selbst.

Und das wird er mir wohl verzeihen!
matejcik
Matfyz(ák|ačka) level I
Příspěvky: 7
Registrován: 29. 8. 2006 10:20

Re: pointerová aritmetika

Příspěvek od matejcik »

JiriD píše:V testu 41 uz se pristupuje k jednotlivym polozkam, recordu
ale MOA od testu 41 tam vůbec není :/
..podle moa k testum si opravdu ke kazde polozce recordu pamatuju i jeji offset (reprezentace 3intoveho recordu obsahuje 9 intu)
tohle jsi vyčetl odkud?
jestli z testů 20-23, tak ty MOA vůbec neodpovídají zdrojákům
Odpovědět

Zpět na „SWI098 Principy překladačů“