erstellt am / farita je 1998-12-28


Programlingvo E koncize (validas por PC-versio 0.9)


- Speco de memoro kaj procesilo bezonataj
- Minimuma vorttrezoro ( D . K )
- Dosieroj
- Fontotekstoj
- Etikedoj
- Generado de kodo ĝenerale
- Generado de kodo (ordonoj dependaj de la procesilo)
- Generado de kodo (ordonoj dependaj de la mastruma sistemo )
- Ordonoj por la demonstra moduso
- Analizo de la memoro
- Aliaj ordonoj

La dokumentitaj vortoj de E
---------------------------
OKT BIN HEX DEC DEKOMP ENHAVO EDIT INFO INIT AUS EIN ( FORGESU 
BF<- EN EL IRT IR0 IRU A- A+ A-> A<- A= IRS M=2 M=1 RE LOKO
AADR MADR ADR FERMU KOMPILU EL-D EN-D K D . LISTU

zurueck / reen!


Speco de memoro kaj procesilo bezonataj 

Por E oni bezonas E-kompililon.
Tio kompililo bezonas lineare adreseblan memoron kun minimuma
grandeco de 4 kilobajtoj, 16-bita adresado kaj 8-bita larĝeco.
La jam ekzistanta PC-versio 0.9 de la kompililo funkcias en la
64K-a memorosegmento 2005 heksadecimale. La eniradreso estas 9C40 h.
La memoro devas havi samtempe leg-, skrib- kaj aplik-permeson.
Krome devas ekzisti stako-memoro (kun profundo de minimume 20
adresoj por subprogramaj saltoj). La stako ne bezonas esti ligata
la la ĉefmemoro de la komputilo.
La procesilo devas havi minimume unu 8-bitan ĉefregistron (akuon) kaj
1-bitaj registojn por la nul- kaj la transigo-statoj.
Laŭ la suba priskribo, E povas funkcii jam per ĉiu 8-bita mikroregilo
kun minimume 4K ĝis per la plej granda komputilego.
Kaŭze de la facila portebleco de E, oni povas generi ĉiu-ajn kodon,
kiu eblas funkcii sur ĉiu-ajn regilo kaj komputilo.


Minimuma vorttrezoro ( D . K )


D                  Komenco de la difino de nova vorto


.                  Fino de difino de nova vorto.
                   Ekzemplo: D 'vortonomo' 176 69 180 14 205 16 203 .

'vortonomo'        Alvokas la kodon de la vorto 'vortonomo'.

'nombro'           Nombroj estas ekz. 0, 1, 2, 63245, 9999 .
                   Nombrojn oni nur povas kompili (1 aŭ 2 bajtoj).
                   Ili ne povas esti aplikataj kiel programo, escepte
                   ke la nombro estas difinita kiel vortonomo.


K                  La kodo post la vorto K difinas la sintenon de la
                   vorto dum la kompilado. Kiam oni ne uzas la vorton K,
                   tiam la vorto estas kompilita kiel subprogramo.
                   ekzemploj:
                   ekzemplo 1: D eligu-E A= 69 EL RE .
                               D eligu eligu-E RE .

                   dum la difinado sur la ekrano: nenio
                   alvoko de vorto: eligu   sur la ekrano: E

                    eligu-E estas kompilita kiel subprogramo!
 
                    ekzemplo 2: D eligu-E RE K A= 69 EL RE .
                                D eligu eligu-E RE .

                    dum la difinado sur la ekrano: E
                    alvoko de vorto: eligu   sur la ekrano: nenio

                    Dum la difino de la vorto eligu aperas E sur la
                    ekrano, ĉar tio estas la kompilokodo de la vorto
                    eligu-E. Nur la vorto RE estas kompilita en la
                    memoron kaj funkcias en la posta difino de "eligu"

       ****************************************************
       * La ĝenerala strukturo de vortodifino en E estas: *
       *                                                  *
       * D vortonomo [aplikokodo] [K] [kompiladokodo] .   *
       * [] = ne nepre bezonata                           *
       ****************************************************


Dosieroj


ENHAVO             ENHAVO listigas la unuan linion de ĉiu spuro de  la
                   disketo (dura disko). La listigo finiĝas kiam oni
                   tajpas grandliteran E.


EN-D               Enigas blokon de 4096 bajtoj de magnet-diska memoro
                   al certa adreso de la memoro.
                   ekz.: EN-D 48 3 1 128 (memorloko, spuro, kapo, drajvo)
                   enigas ek de la adreso 48 * 256 = 12288 4096 bajtojn
                   de la spuro 3 per la kapo 1 de la unua dura disko.
                      numeroj de drajvoj    0 = disketilo  A:
                                            1 = disketilo  B:
                                          128 = dura disko C:
                                          129 = dura disko D:


EL-D               Eligas blokon de 4096 bajtoj de la ĉefmemoro sur spuro
                   de la magneta disko.
                   !!! Averto - La ordono EL-D povas detrui la enhavon de
                       la disko, kiam oni aplikas ĝin senpripensante !!!


Fontotekstoj



KOMPILU            KOMPILU kompilas fontotekston, kiu troviĝas en la
                   (segmento de la) ĉefmemoro je la adreso 0.
                   Rimarko: E troviĝas en la ĉefmemoro ĉiam en segmento
                   2005 heksadecimale = 8197 decimale.


FERMU              Markigas la finon de la teksto.


EDIT               EDIT estas malgranda tekstoprilabora programo
                   ( nur ĉirkaŭ 300 bajtojn granda).
                   Tajpante EDIT + enigoklavo kaj poste spacetoklavo
                   la teksto ek de la adreso 0 estas montrata linio post
                   linio. Tajpado de grandlitera F finas la programon.
                   Tio estas la tekstomontra moduso.
                   Ek de la tekstomontra moduso oni iras per premado de
                   la enigo-klavo al la skribomoduso.
                   Nun oni povas skribi tekston kaj korekti unu linion
                   per uzo de la repaŝoklavo.
                   Kiam oni pemas denove la enigoklavon oni forlasas la
                   skribomoduson kaj reiras al la tekstomontra moduso.
                   Do - por skribi plurajn liniojn de teksto, oni devas
                   ĉiam dufoje premi la enigoklavon.


Etikedoj


LOKO               LOKO markigas lokon en la memoro. Eblas difini 128
                   de tiuj etikedoj - LOKO 0 ĝis LOKO 127 .


ADR                ADR estas montrilo al loko en la memoro. Alivorte
                   ADR estas adreso (16 bita) kiu montras la loko
                   difinita per LOKO.
                   Ekz.: ADR 32 montras al la loko LOKO 32 .


MADR               Kiam je la loko LOKO 32 estas la adreso
                   1025 = 4*256 + 1 MADR 32 montras al la malaltvalora
                   bajto do al la adreso, kiu enhavas la bajton 1 .


AADR               Same AADR 32 montras la la altvalora bajto de tiu
                   adreso kiu enhavas la bajton 4.


Generado de kodo ĝenerale


M=2                Sekvantaj nombroj estas kompilitaj kiel 2 bajtoj.
                   Ekz.: 16B 230 estas kompilita kiel 0 230 (ne nur 230!)

M=1                Sekvantaj nombroj estas kompilitaj kiel 1 bajto.
                   Ekz.: 8B  230 estas kompilita kiel 230   (ne 0 230!)

BF<-               La kompililo daŭrigas la kompiladon je la adreso kiu
                   sekvas la ordonon BF<- .
                   Ekz.: BF<- 30000  aŭ BF<- ADR 123


Generado de kodo (ordonoj dependaj de la procesilo)


A=                 La sekva numero estas enigata en la akumulatoran
                   registron (AL-registro kiam temas pri 8086-procesilo)
                   Ekz.: A= 123


A<-                La sekva numero estas la adreso, kies enhavo estas
                   portata al A-registro
                   Ekz.: La enhavo de la adreso 12345 estu 65
                         A<- 12345
                         En la A-registro estas nun 65


A->                La enhavo de la A-registro estas transportata al la
                   adreso, kiu sekvas la ordonon
                   Ekz.: La enhavo de la A-registro estu 65
                         A-> 12345
                         La enhavo de la adreso 12345 estas nun 65


A+                 La sekva nombro plus la transigobito estas adiciitaj
                   al la A-registro. Kiam la rezulto estas pli granda ol
                   255 la transigo farigas 1 alikaze la transigo estas 0.
                   La rezulto restas en la A-registro.
                   Ekz.: Estu T = 0   A-registro = 65
                         A+ 200
                         A-registro = 265-256 = 9    T = 1


A-                 La sekva nombro kaj la transigo estas subtrahitaj de
                   la A-registro. Kiam la rezulto estas negativa, la
                   transigo estas 1 alikaze ĝi estas 0 .
                   Ekz.: Estu T = 0  A-registro = 65
                         A- 10
                         A-registro = 55             T = 0


IRU                La programo saltas al la memorloko, kies adreso estas
                   la numero, kiu sekvas la ordonon.
                   Ekz.: IRU 12345 aŭ IRU ADR 32
 

IR0                La programo saltas al la adreso, kiu sekvas la ordonon,
                   kiam antaŭa kalkulo donis nulo kiel rezulto. Alikaze
                   la programo normale daŭrigas per la sekva instrukcio.


IRT                La programo saltas al la adreso, kiu sekvas la ordonon,
                   kiam la transigobito estas 1, alikaze la programo
                   aplikas la sekvan instrukcion.


IRS                La programo saltas al subprogramo, kies adreso estas
                   la sekvanta nombro.
 

RE                 La programo reiras de subprogramo al la antaŭa
                   programoparto.


Generado de kodo ( ordonoj dependaj de la mastruma sistemo )



EN                  EN prenas unu signon de la standarda enigaparato
                    (normale de la klavaro). Kiam neniu signo estas
                    (kiam oni ne premis sur la klavaro) la A-registro
                    ricevas la valoron nulo. Alikaze la A-registro
                    enhavas la valoron de la ASCII-kodo de la signo.


EL                  La enhavo de la A-registro estas eligata al la
                    standarda eligaparato (kutime la ekrano).
                    Ĝi estas eligata laŭ la tiel nomata telegram-moduso,
                    tio estas ke la ASCII-kodoj 7,8,10 kaj 13 estas
                    aplikataj.


Aliaj ordonoj


LISTU               LISTU listas ĉiujn vortojn de la vortaro.


FORGESU             La kompililo forviŝas ĉiujn vortojn inklusive la
                    alvokita vorto.
                    Ekz.: FORGESU K forgesigas ĉiujn vortojn tiel, ke
                    restos nu la vortoj D, . kaj LISTU.
                    Sen tiuj vortoj la kompililo ne plu funkcias!


(                   Komentoj troviĝas inter krampoj. La teksto inter la
                    (-signo kaj la )-signo estas ignorata, tio signifas
                    nek estas kompilata nek aplikata.


Ordonoj por la demonstra moduso



INFO                 Spuro 1 de la diskedo estas enigata al la memorbloko
                     48 ( =48*256 = 12288) kaj la fontoteksto estas
                     prilaborata. Funkcias tiel ke la fontoteksto estas
                     kvazaŭ aŭtomate entajpata enskribante ĝin en la
                     tekstobufron de la komputilo.
                     Premo sur la paŭzo-klavo haltas la tajpadon.


INIT                 Tiu vorto remetas la tekstomontrilon al la komenco de
                     la memorbloko 48.


EIN                  EIN enŝaltas la demo-moduson.


AUS                  FINAS la demo-moduson.
 

Analizo de la memoro



DEKOMP               DEKOMP listas la kompilitajn nombrojn de la memoro
                     Du alvokoj de DEKOMP eblas.
                     Ekz. 1: DEKOMP 12345 listas la enhavon de la memoro
                             ek de la adreso 12345
                     Ekz. 2: DEKOMP "nomo_de_la_vorto" listigas la enhavon
                             de la memoro ek de la "nomo_de_la_vorto"
                     Dum ĉiu klavopremo 10 bajtoj estas montritaj.
                     La programo finas post enigo de grandlitera E.


DEC                  La decimala sistemo estas uzata por nombroj.
                     Tio estas la normala nombrosistemo uzata de E.
                     Ciferoj: 0 1 2 3 4 5 6 7 8 9


HEX                  La heksadecimala sistemo estas uzata.
                     Ciferoj: 0 1 2 3 4 5 6 7 8 9 A B C D E F


BIN                  La binara sistemo estas uzata.
                     Ciferoj: 0 1


OKT                  La oktala sistemo estas uzata.
                     Ciferoj: 0 1 2 3 4 5 6 7