Stránka 1 z 1

pointerová aritmetika

Napsal: 24. 1. 2010 23:49
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?

Re: pointerová aritmetika

Napsal: 25. 1. 2010 09:08
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)

Re: pointerová aritmetika

Napsal: 25. 1. 2010 13:29
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