|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4480 (0x1180)
Types: TextFile
Names: »CCSYNTAX.BAK«
└─⟦9dfa17898⟧ Bits:30009789/_.ft.Ibm2.50007352.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »CCSYNTAX.BAK«
└─⟦bfec2519f⟧ Bits:30009789/_.ft.Ibm2.50007346.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »CCSYNTAX.BAK«
Definition af syntaks for kompakt assembler kode.
Symbolerne < > (* *) ::= ! og NIL er metasymboler.
<program> ::= <linelist>
<linelist> ::= NIL ! <line> <linelist>
<line> ::= <operation> <parameterlist>
<operation> ::= <instruction> ! <directive>
<instruction> ::= (* Se liste over instruktioner *)
<directive> ::= (* Se liste over direktiver *)
<parameterlist> ::= NIL ! <parameter> <parameterlist>
<parameter> ::= <expression> ! <ascii-string> ! <count> !
<mask-id> ! <flag-id> !
<condition-id> ! <interrupt-id> !
<control-register-id> ! <register-id>
<expression> ::= <symbol-id> !
EXPRESSION-ERROR <count> <ascii-string> !
LITERAL-HEXA <long-word> !
LITERAL-DECI <long-word> !
LITERAL-CHAR <ascii-string> !
LITERAL-CTRL <ascii-string> !
<monopr> <expression> !
<diopr> <expression> <expression> !
<ascii-string> ::= <count> <ascii-sequence>
<count> ::= 0..255
<long-word> ::= 0..4294967295
<ascii-sequence> ::= NIL ! <ascii-character> <ascii-sequence>
<monopr> ::= UN-MINUS ! UN-PLUS ! PARENTHESIS !
SGM ! OFS ! CPT ! LIN ! NOT
<diopr> ::= + ! - ! * ! / ! MOD ! AND ! OR ! XOR ! SGMOFS !
SHL ! SHR
<register-id> ::= <register-type> <register-no>
<register-type> ::= 0..4 ? (* RH ! RL ! R ! RR ! QR *)
<register-no> ::= 0..15
<ascii-character> ::= 0..127
<symbol-id> ::= 0..32768
<mask-id> ::= ?
<flag-id> ::= 0..127 ?
<condition-id> ::= 0..15
<interrupt-id> ::= 0..7 ?
<control-register-id>::= 0..11 ? (* PS ! PC ! FCW ! PSAP ! NSP !
OSP ! HICR ! SCCL ! SITTD !
SDTTD ! NITTD ! NDTTD *)
------------------------------------------------------------------------------
Af operationskoderne fremgår det implicit, hvilke typer parametre, der
følger. Hvis antallet af parametre er variabelt, fremgår dette af en af de
parametre, der ikke må udelades. Instruktioner har altid fast parameterantal,
og reglerne for de enkelte direktiver fremgår af fortegnelsen over disse.
De vigtigste non-terminaler er <expression> og <symbol-id>. <symbol-id>
er et indeks til symboltabellen, og udpeger derved udtrykkets værdi. Hvis
udtrykket er mere kompliceret end et enkelt symbol, angives dette ved at
udtrykket indledes med en operator, som implicit angiver, om den er monadisk
eller dyadisk. (Triadiske operatorer har ikke været nødvendige i udtryk, men
operationer - dvs. instruktioner og direktiver - kan opfattes som operatorer
med flere operander).
Der er nu 24 operatorer, som derfor mageligt kan indkodes i en oktet.
De skelnes fra <symbol-id>'er ved at deres første bit (#7) er sat (=1).
32K Symboler skønnes at være tilstrækkeligt til (at fylde 64K RAM og) de
fleste anvendelser, og da 128 er for lidt, regner jeg med at bruge 2 oktetter
pr. <symbol-id>.
Det største problem ved udformningen af den kompakte kode har i virkelig-
heden ikke meget med kompakt kode at gøre. Det er spørgsmålet om symboler og
udtryks typer. Ved fælles hjælp nåede vi frem til at skelne mellem 4 typer:
Tal og de 3 adresseformater compact, linear og segmented. Tegnstrenge forekom
(antog jeg fejlagtigt) kun som konstanter i direktivers parametre. Men det er
nyttigt at kunne benytte dem i udtryk og som operander til f.eks. load
register immediate. Et andet eksempel er adder værdien af ascii nul
(ikke null) til et bcd-ciffer. I det foreliggende har jeg derfor indført
tegnstrenge som en alternativ skrivemåde for tal. Al aritmetik i assembleren
foregår med operander på 32 bit (incl. fortegn), og værdien af en tegnstreng
er derfor de 32 mindst betydende bit af strengen med 32 foranstillede nulbit
fortolket som 32 bit heltal (incl. fortegn) (eng: signed 32 bit integer). Der
skelnes derfor mellem de samme typer som før - blot kan tal (eller en lidt
særpræget men ofte anvendt delmængde af disse) skrives på en alternativ måde.
«eof»