Pěkně popsáno, díky!
Zarazil mě popis u MOVA, tahle definice mi nepřišla dostatečně použitelná. Ve skutečnosti instrukce není jen přepočet adresy k PC, ale navíc právě i načtení té paměti. Navíc, vzhledem k 16-bitovým instrukcím si ještě nejdřív PC zaokrouhlí na 32 bitů, aby byla celková adresa vždy zarovnána. Pro position independent code naprosto ideální :-)
Jinak tohle pevné kódování je pro procesor určitě super, IMHO 16 registrů plně stačí (obvykle i míň, jak ukazuje Thumb2). Ale zajímalo by mě, jak potom implementují budoucí extensions. Nebo si řekli, že tahle instrukční sada bude stačit navždy?
Díky za zpětnou vazbu! Mě se tento procesor hodně líbí, oni se odklonili od klasického RISCu (aka MIPS, AMD 29k, SPARC atd.) a skutečně vytvořili elegantní a interně asi pořád ještě jednoduchý design s několika DSP instrukcemi (MAC, možná bych sem zařadil i DIVx).
Trošku jsem ten popis upravil ("dosah" adresování atd.), ale mám pocit, že MOVA pořád odpovídá spíše LEA; takto to mají do vyššího kódu přepsané autoři:
MOVA(long d) /* MOVA @(disp,PC),R0 */ { long disp; disp=(0x000000FF & (long)d); R[0]=(PC&0xFFFFFFFC)+(disp<<2); PC+=2; }
A používá se to stylem:
MOVA STR,R0 ; adresa retezce MOV.B @R0,R1 ; nacteni prvniho znaku
nebo (nejaky cislicovy filtr):
MOVA TBLM,R0 ; adresa prvniho pole -> R1 MOV R0,R1 MOVA TBLN,R0 ; adresa druheho pole -> R0 CLRMAC ; vymaz MACH+MACL MAC.L @R0+,@R1+ ; krok filtru
tj. načtení adres do R0 a R1 a potom v MAC.L použití registrů R0 a R1 pro adresování.
Tak omlouvám se, beru zpět. Našel jsem ještě jiný zdroj (asi stejný - http://koti.kapsi.fi/~antime/sega/files/h12p0.pdf), méně matoucí, a skutečně je to jenom výpočet efektivní adresy, bez load. Takže jen to zarovnání na 4 byty...
Jinak souhlasím, že vypadá hezky a jednoduše, až na ten T-bit, který má možná MIPS vyřešen z hlediska paralelismu líp (tedy vůbec).
Nevadi, ja jsem prave projizdel specky k novym cipum a zrovna u teto instrukce je to hodne matouci. Ne to co dela, ale zapis formou @(PC+disp), R0, takze to skutecne vypada, jakoby se cetlo Z ADRESY PC+disp.
Jj to je pravda, v MIPSu se (zpocatku) drzeli vyznamu te zkratky Microprocessor without Interlocked Pipeline Stages (asi az na nasobeni a deleni). Akorat mi pripadne, ze kdyz uz museli natahnout instrukce na 32 bitu, tak nekdy nevedeli co tam pridat, takze je tam shift amount, kterej se (asi) zase tak casto nevyuzije.
jj MIPS mel hlavne triadresovy kod, coz se sice mozna na prvni pohled nemusi zdat jako velka vyhra, ale klidne se mohlo rict "od ted bude registr R12 (napriklad) fungovat jako bit T, takze je destination pro instrukce SLT, SLTU, SLTI a testovan bude v BEQ a BNE oproti R0/nule". A je z toho neco velmi podobneho SuperH, az tedy na problem s temer dvojnasobnym tokem z code segmentu.