lit
Programovací jazyk lit je součást mé diplomové práce stejně jako návrh a implementace zásobníkového procesoru na FPGA. Lit vychází z forthu.
instrukční sady
značení
a - bezznaménková hodnota na datovém zásobníku
s:a - znaménková hodnota na datovém zásobníku
r:a - hodnota na návratovém zásobníku
input:word - slovo na vstupu
... - proměnný počet buněk/znaků
žravá
Snaží se spíš požrat parametry na zásobníku.
| instrukce | zásobníkový diagram | popis |
|---|
| nop | ( - ) | počká jeden takt |
| paměťové operace |
|---|
| store | ( data address - ) | uloží data na adresu |
| fetch | ( address - data) | načte data z adresy |
| store-to | ( data index address - ) | |
| fetch-from | ( index address - data ) | |
| store-byte-to | ( index address data - ) | |
| fetch-byte-from | ( index address - data ) | |
| zásobníkové instrukce |
|---|
| lit | ( - data ) | |
| top | ( a - a ) | |
| second | ( a b - a b a ) | |
| third | ( a b c - a b c a) | |
| nip | ( a - ) | |
| swap | ( a b - b a ) | |
| pull | ( a b c - b c a ) | |
| tuck | ( a b c - c a b) | |
| store-local | ( a - r:a ) | |
| local | ( r:a - r:a a ) | |
| nip-local | ( r:a - ) | |
| aritmetické instrukce |
|---|
| inc | ( a - a+1 ) | |
| dec | ( a - a-1 ) | |
| plus | ( a b - a+b) | |
| minus | ( a b - a-b) | |
| mul | ( a b - a*b ) | |
| smul | ( s:a s:b - s:a*b ) | |
| bitové instrukce |
|---|
| not | ( a - 'a ) | |
| and | ( a b - a&b ) | |
| or | ( a b - a|b ) | |
| xor | ( a b - a^b ) | |
| lshift | ( a b - a<<b ) | |
| rshift | ( a b - a>>b ) | |
| porovnávací instrukce |
|---|
| is-lesser | ( a b - a a<b ) | |
| is-eleser | ( a b - a a<=b ) | |
| is-equal | ( a b - a a==b ) | |
| is-slesser | ( s:a s:b - s:a a<b) | |
| řídící instrukce |
|---|
| jump | ( - ) | |
| branch | ( flag - ) | |
| not-branch | ( flag - ) | |
| call | ( address - r:program-counter) | |
| ret | ( r:program-counter - ) | |
| instrukce interpretru |
|---|
| add-word | ( string - ) | |
| compile | ( - ) | |
| execute | ( - ) | |
| state | ( - state ) | |
| alloc | ( size - ) | |
| realloc | ( address size - address size ) | |
| free | ( address - ) | |
| immediate | ( - ) | |
| forced-compile | ( - ) | |
| tag | ( - tag ) | |
| reserve | ( size - size ) | |
| code | ( string - code ) | |
| token | ( string - token ) | |
| program-counter | ( - pc) | |
| read-word | ( input:word - string) | |
| read-stream | ( token input:... - ) | |
| reset | ( ... - ) | |
| tic | ( - timehigh timelow) | |
| tac | ( timehigh timelow - ) | |
| see | ( input:prefix - ) | |
| bye | ( - ) | |
| word-name | ( - name ) | |
| word-token | ( - token ) | |
| word-code | ( - code ) | |
| stack | ( - ) | |
| print | ( string - string ) | |
| export | ( - ) | |
líná
Většinou ponechává parametry na zásobníku.
| instrukce | zásobníkový diagram | popis |
|---|
| nop | ( - ) | počká jeden takt |
| paměťové operace |
|---|
| store | ( address data - address data ) | uloží data na adresu |
| fetch | ( address - address data ) | načte data z adresy |
| store-to | ( address index data - address index data ) | |
| fetch-from | ( address index - address index data ) | |
| store-byte-to | ( address index data - address index data ) | |
| fetch-byte-from | ( address index - address index data ) | |
| zásobníkové instrukce |
|---|
| lit | ( - data ) | |
| top | ( a - a ) | |
| second | ( a b - a b a ) | |
| third | ( a b c - a b c a) | |
| nip | ( a - ) | |
| swap | ( a b - b a ) | |
| pull | ( a b c - b c a ) | |
| tuck | ( a b c - c a b) | |
| store-local | ( a - a r:a ) | |
| local | ( r:a - r:a a ) | |
| nip-local | ( r:a - ) | |
| aritmetické instrukce |
|---|
| inc | ( a - a+1 ) | |
| dec | ( a - a-1 ) | |
| plus | ( a b - a a+b) | |
| minus | ( a b - a a-b) | |
| mul | ( a b - a a*b ) | |
| smul | ( s:a s:b - s:a s:a*b ) | |
| bitové instrukce |
|---|
| not | ( a - 'a ) | |
| and | ( a b - a a&b ) | |
| or | ( a b - a a|b ) | |
| xor | ( a b - a a^b ) | |
| lshift | ( a b - a a<<b ) | |
| rshift | ( a b - a a>>b ) | |
| porovnávací instrukce |
|---|
| is-lesser | ( a b - a a<b ) | |
| is-eleser | ( a b - a a<=b ) | |
| is-equal | ( a b - a a==b ) | |
| is-slesser | ( s:a s:b - s:a a<b) | |
| řídící instrukce |
|---|
| jump | ( - ) | |
| branch | ( flag - ) | |
| not-branch | ( flag - ) | |
| call | ( address - r:program-counter) | |
| ret | ( r:program-counter - ) | |
| instrukce interpretru |
|---|
| add-word | ( string - string ) | |
| compile | ( - ) | |
| execute | ( - ) | |
| state | ( - state ) | |
| alloc | ( size - ) | |
| realloc | ( address size - address size ) | |
| free | ( address - ) | |
| immediate | ( - ) | |
| forced-compile | ( - ) | |
| tag | ( - tag ) | |
| reserve | ( size - size ) | |
| code | ( string - string code ) | |
| token | ( string - string token ) | |
| program-counter | ( - pc) | |
| read-word | ( input:word - string) | |
| read-stream | ( token input:... - ) | |
| reset | ( ... - ) | |
| tic | ( - timehigh timelow) | |
| tac | ( timehigh timelow - ) | |
| see | ( input:prefix - ) | |
| bye | ( - ) | |
| word-name | ( - name ) | |
| word-token | ( - token ) | |
| word-code | ( - code ) | |
| stack | ( - ) | |
| print | ( string - string ) | |
| export | ( - ) | |
poslední změna 15.12.2010
komentáře