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?
nějak jsem si na cvičení nezapamatoval/nepochopil jak s tím, tak se ptám tady.
situace:
[code]
type babicka = record a,b,c:integer end;
procedure ahoj (var babi:babicka)
begin
babi.c := 7;
end;
[/code]
jak vypadá vygenerovaný assembler? já si ho představuji zhruba takhle:
[code]
LLDP [-1] // adresa pointeru na stacku
ADDP (2) // offset položky c
LDLITI [666] // hodnota "7"
XSTI
[/code]
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?