erstellt am / farita je 1999-01-24


Kiel mem konstrui kompililon per la Esperanto-Programlingvo E


Antaýrimarko: Mi origine planis fari tion kurson en la 
"Forstwissenschaftliche Fakultät" en Freising kadre de la 
unua Bavara studadsesio de la Akademio Internacia de San Marino 
(AIS) en Oktobro 1988. 
Pro familiaj kaýzoj la kurso ne povis okazi. Tial mi nun 
iom post iom publikigos la kurs-materialon en mia hejmpaøo.

Informojn pri AIS vi povas atingi je
"http://www.forst.uni-muenchen.de/OTHERS/AIS"


ENHAVO
La komputilo - simpla modelo

- La lingvo de la komputilo - la maþina lingvo
- Programoj kaj datenoj
- La programlingvo inter la natura lingvo kaj la maþina lingvo
- La kompililo - programo por traduki programlingvon al maþina lingvo


La Esperanto-programlingvo E

- Kelkaj ekzemploj


La strukturo de la E-kompililo

- La kerno
- La biblioteko (vortaro)


Konstruado de nova kompililo per E

Leciono 1
- Skribi fontotekston
- Prilabori fontotekston
Leciono 2
Leciono 3
Leciono 4
Leciono 5
Leciono 6
Leciono 7

La komputilo - simpla modelo


Antaý ni komencas konstrui kompililon, ni devas deklari 
kelkajn fundamentajn aferojn:
Kiel funkcias komputilo?
Kio estas la maþina lingvo?
La bildo eble respondas tiujn demandojn.
La bildo bezonas 26 K !
Simpla modelo de komputilo

 
Vi vidas simpligitan strukturon de komputilo konsistanta el procesilo 
kaj memoro.
Por ke la komputilo povas labori øi bezonas programon en la memoro. 
Programo konsistas el pluraj instrukcioj kiuj priskribas, kion la
komputilo devas fari.
Tiuj priskriboj ne estas en homa lingvo, sed estas skribitaj en 
la tiel nomata maþina lingvo ( do vico de nombroj inter 00000000 kaj
11111111 binare aý 0 kaj 255 decimale).
Sed tiun lingvon la maþino (komputilo) "komprenas".
Kiam oni startas la komputilon, la procesilo metas startadreson en la
programmontrilon (en nia ekzemplo adreson 0000).
La programmontrilo montras nun al la adreso 0000. La procesilo prenas
la enhavon de tio memorloko (00000000) kaj interpretas gin kiel 
instrukcio. 0000000 signifas en la masina lingvo "faru nenion".
La procesilo faras nenion kaj poste inkrementas la programmontrilon.
Øi montras nun al la adreso 0001 kaj la tuta afero ripetadas.
Post kvar paþoj la programmontrilo montras al la adreso 0100 (4).
Tie estas la instrukcio 10110000 (176). Tio instrukcio signifas :
"Prenu la sekvan bajton el la memoro kaj transportu gin al la A-registro". 
La sekva bajto estas 01000101 (69). kaj estas transportata al la akuo.
Poste la programmontrilo montras sur la adreso 0110 (6).
Tio estas la situacio, kion la bildo montras. 

Æu vi rimarkis ke la bajto 01000101 (69) estas io alia ol la 
instrukcio 10110000 (176)? 
01000101 estis dateno kiun la instrukcio 10110000 prilaboris. 
Do oni diferencas pri du fundamentaj tipoj de informoj: programoj kaj 
datenoj
Kiam la procesiloj povas plenumi la instrukcioj de la programoj, la datenoj
aliflanke tute ne havas sencon por øi. 
La sencon al la datenoj donas nur la homo kiam li difinas kodojn 
æu la datenoj estas literoj, tekstoj, bildoj aý voæoj ktp.
En nia ekzemplo la dateno 01000101 estas la ASCII-kodo por la litero "E".    

La maþina lingvo estas tre abstrakta por homoj - sed tamen øi estas la
sola lingvo kiun la komputilo komprenas!

Anstataý programi

00000000 00000000 0000000 00000000 10110000 01000101

estus pli bone se ni povus skribi:

Faru certan tempon nenion kaj poste transportu la literon E al la akuo!

La solvo de la problemo estas la programlingvo, kio estas unuflanke sufiæe proksime al la homa lingvo kaj kio estas aliflanke formale, ke programo povas aýtomate traduki tion lingvon en maþinan lingvon. La programon kiu tradukas fontotekston de la formala programlingvo al ma%#254;inan kodon oni nomas kompililo. La formala programlingvo en tio kurso estas la lingvo E. Unu el la fundamentaj konceptoj de tio lingvo estas ke oni povas anstataýi pecon da maþina lingvo per vorto en natura lingvo. Do la suba maþina kodo povus esti skribita en E:

faru-nenion faru-nenion faru-nenion faru-nenion A= "E"

Vi vidas ke tio priskribo de la programada problemo estas nun sufiæe homeca - tamen ankora%#253; relative proksima al la maþina lingvo! En E estas 10 instrukcioj kiuj rilatas rekte al maþina kodo: A= A<- A-> A+ A- IRU IR0 IRT IRS kaj RE Detalajn priskribojn vi trovas en la æapitro: "La Esperanto-programlingvo E koncize" Øis nun mi ne priskribis kiel komputilo komunikas kun la ekstera mondo. Tion vi vidas en la sekva bildo.
La bildo bezonas 26 K !
Simpla modelo de PC, BIOS kaj mastruma sistemo



Komputilo konsistas kutime el la komputilo mem (procesilo + memoro), 
la klavaro por enigi informojn kaj la ekrano por eligi informojn.
Krome ekzistas disketilo (au dura disko) por stori permanente informojn.

Æar preskaý æiuj programoj bezonas en- kaj elig-procedurojn oni havas en la
PC-komputilo la tielnomata BIOS (baza enigo - eligo sistemo), tio estas
aro de programoj, kiujn aliaj programoj povas uzi. La uzo de BIOS þparas tempon.

Ofte en komputiloj ekzistas krom la "BIOS" sistemo de programoj kiuj 
superrigardas la aplikon de aliaj programoj, kaj permesas la kreadon,
en- eligadon, kopiadon kaj renomadon de dosierojn. Tion oni nomas
mastruma sistemo (angle: operating system). 
E estas ankaý mastruma sistemo.

Por la komunikado kun la klavaro, ekrano kaj disketiloj E uzas
la ordonojn EN EL EN-D kaj EL-D.

La Esperanto-programlingvo E


Detalajn priskribojn pri la Esperanto-programlingvo E vi trovas en
la capitroj "Enkonduko" kaj "La Esperanto-Programlingvo E koncize".

- Kelkaj ekzemploj


Kiel vi tie lernis E konsistas el vortoj kiujn oni povas uzi en difinoj de novaj vortoj ktp. Tio preskaý devigas nin difini unue la bazajn vortojn kaj fini per la lasta vorto. En la ekzemplo en la "Enkonduko" ni do unue difinis "eligu-E nova-linio 1E" kaj "4E" antaý ni difinis la æefprogramon "granda-E". Tio programstilo estas iomete kontraý la homa pensmaniero. Ni kutimas vidi problemojn unue øenerale kaj poste ni okupiøas pri la detaloj. En E oni ankaý povas programi tiamaniere (de supre al malsupre - angle: top down). Ni supozu ke ni volas programi iun øeneralan ideon kaj ni scias ke tio konsistas el paþo-A kaj paþo-B. Sed pri detaloj pri paþo-A kaj paþo-B ni ankoraý ne pensis. Tamen ni volas vidi æu programo øenerala_ideo funkcias. Simple skribi D øenerala_ideo paþo-A paþo-B RE . ne funkcias, æar la kompililo nek konas paþo-A nek paþo-B. Tial ni skribu D paþo-A A= 65 EL RE . D paþo-B A= 66 EL RE . ( 65 kaj 66 estas ASCII-Kodoj por A kaj B ) D øenerala_ideo paþo-A paþo-B RE . Nun la programo funkcias kaj donas AB kiel rezulto. Ni povas nun trankvile trakti la problemojn paþo-A kaj paþo-B øis ni iras al la plej bazaj partoj de la programo.

La strukturo de la E-kompililo


La bildo bezonas 30 K !
Strukturo de E-kompililo



La bildo montras E-kompililon konsistante el la kerno, kaj la biblioteko
kun la vortoj D . kaj eligu-e .
La kerno enhavas diversajn subprogramojn, kiuj ebligas difini kaj apliki 
la vortojn en la biblioteko.
Æiuj vortoj estas ligitaj per ligadresoj. La ligadreso de la vorto D estas
0000. Tio montras, ke øi estas la unua vorto. La aliaj ligadresoj montras
al la antaýa vorto.
(En kazo de la vorto eligu-e tio adreso estas  177*256+203=45515.)
Tiamaniere æiuj vortoj estas ligitaj kun la aliaj.
Post la ligadreso sekvas la vortnomo finita per la ascii-kodo 13. 
Tio desegnas la finon de la vortnomon. Post la vortnomo troviøas la 
adreso de la kompiliga kodo de la vorto. 
Kiam oni uzas vorton en difino de nova vorto la kompililo saltas al la 
kodo al kio montras tio adreso.
(En kazo de la vorto eligu-e tio adreso estas  164*256+172=42156.) 
Poste sekvas la apliko-kodo. Tio kodo estas aplikata kiam oni tajpas 
la vortnomon. 
(En kazo de la vorto eligu-e tio kodo estas 176 69 180 14 205 16 203 
kiel en la difino. )  

Konstruado de nova kompililo per E



La bildo bezonas 13 K !
La æefa banto de la kompililo



Leciono 1

Nun ni vidis kiel komputilo funkcias, kio programlingvo kaj kompilio estas kaj kiel la interna strukturo de E-kompililo estas. Nun ni povas fine skribi la kompililon mem. Sed por skribi øin ni bezonas alian e-kompililon! Se vi ankoraý ne havas tion, vi ricevos en la æapitro: "La E-kompililo kaj la mastruma sistemo E 0.9" Por konstrui kompililon ni iras de la øeneralo al la detaloj kiel antaýe priskribita: Øenerale la kompililo estas programo kun banto kio havas du subprogramojn: skribu_tekston kaj prilaboru_tekston. Ni skribu la kvar fontotekstojn kaj storu ilin sur la spuroj 10, 17, 18 kaj 19: ( 10 E-kompililo leciono 1 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 17 ) D skribu_tekston A= 83 EL RE . ( Eligas "S" por testi ) FERMU ( 18 ) D prilaboru_tekston A= 80 EL RE . ( Eligas "P" por testi ) FERMU ( 19 ) D e-kompililo LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . FERMU La tuton ni kompilu per: EN-D 48 10 0 0 INIT EIN La vorto e-kompililo donas nun senfine SPSPSPSPSPSPS . Tio devas esti, æar la E-kompililo estas ja samtempe mastruma-sistemo, kaj mastruman sistemon oni ne povas forlasi. Sed por la konstruado de la kompililo øenas, ke ni ne povas fini la programon. Tial ni aldonu sekvan linion: ( 19 ) D e-kompililo LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . D e-kompililo skribu_tekston prilaboru_tekston RE . FERMU Post rekompilado la nova vorto e-kompililo donas nur unufoje SP. Tio estis la unua leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-001.exe (3K) (Startu poste dosieron 1.bat !)
La bildo bezonas 14 K !
Skribu tekston



Leciono 2


Ni skribu la kvin fontotekstojn kaj storu ilin sur la spuroj 10, 16, 17, 18 kaj 19. Poste ni kompilu la tuton per EN-D 48 10 0 0 INIT EIN . ( 10 E-kompililo leciono 2 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 16 0 0 KOMPILU EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 16 ) D tk->at A= 32 EL A= 84 EL A= 65 EL RE . ( Eligas "TA" por testi ) D nova_linio A= 32 EL A= 78 EL A= 76 EL RE . ( Eligas "NL" por testi ) D en<-sig A= 32 EL A= 69 EL A= 83 EL RE . ( Eligas "ES" por testi ) D sig=13? A= 32 EL A= 63 EL A= 49 EL A= 51 EL LOKO 0 EN IR0 ADR 0 A- 13 RE . D sig=8? A= 32 EL A= 63 EL A= 56 EL LOKO 0 EN IR0 ADR 0 A- 08 RE . D sig->el A= 32 EL A= 83 EL A= 69 EL RE . ( Eligas "SE" por testi ) D a->at A= 32 EL A= 65 EL A= 65 EL RE . ( Eligas "AA" por testi ) D at+1 A= 32 EL A= 65 EL A= 43 EL RE . ( Eligas "A+" por testi ) D at-1 A= 32 EL A= 65 EL A= 45 EL RE . ( Eligas "A-" por testi ) FERMU ( 17 ) D skribu_tekston tk->at nova_linio LOKO 0 en<-sig sig=13? IR0 ADR 1 sig->el a->at at+1 sig=8? IR0 ADR 2 IRU ADR 0 LOKO 2 at-1 at-1 IRU ADR 0 LOKO 1 A= 32 a->at at+1 A= 13 a->at at+1 RE . FERMU ( 18 ) D prilaboru_tekston A= 80 EL RE . FERMU ( 19 ) D E-KOMPILILO LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . D E-KOMPILILO skribu_tekston prilaboru_tekston RE . FERMU Tio estis la dua leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-002.exe (3K) (Startu poste dosieron 2.bat !)

Leciono 3

Ni skribu la sep fontotekstojn kaj storu ilin sur la spuroj 10, 14, 15, 16, 17, 18 kaj 19. Poste ni kompilu la tuton per EN-D 48 10 0 0 INIT EIN . ( 10 E-kompililo leciono 3 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 14 0 0 KOMPILU EN-D 0 15 0 0 KOMPILU EN-D 0 16 0 0 KOMPILU EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 14 ) D variabloj LOKO 127 EN RE 0 0 0 0 0 0 ( standarda enigo ) LOKO 126 EL RE 0 0 0 0 0 0 ( standarda eligo ) LOKO 125 0 0 0 0 0 ( sig = provizora storo por signo ) LOKO 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( teksto-bufro ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LOKO 123 ADR 124 ( tk = komenco de la teksto-bufro ) . FERMU ( 15 ) D a->at A-> LOKO 122 00 RE . ( at = aktuala pozicio en la teksto ) FERMU ( 16 ) D tk->at A<- MADR 123 A-> MADR 122 A<- AADR 123 A-> AADR 122 RE . D nova_linio A= 13 IRS ADR 126 A= 10 IRS ADR 126 RE . D en<-sig LOKO 0 IRS ADR 127 IR0 ADR 0 A-> ADR 125 RE . D sig=13? A= 9 A- 0 A<- ADR 125 A- 13 RE . D sig=8? A= 9 A- 0 A<- ADR 125 A- 8 RE . D sig->el A<- ADR 125 IRS ADR 126 RE . D at+1 A= 0 A+ 0 A<- MADR 122 A+ 1 A-> MADR 122 A<- AADR 122 A+ 0 A-> AADR 122 RE . D at-1 A= 9 A- 0 A<- MADR 122 A- 1 A-> MADR 122 A<- AADR 122 A- 0 A-> AADR 122 RE . FERMU ( 17 ) D skribu_tekston tk->at nova_linio LOKO 0 en<-sig sig=13? IR0 ADR 1 sig->el a->at at+1 sig=8? IR0 ADR 2 IRU ADR 0 LOKO 2 at-1 at-1 IRU ADR 0 LOKO 1 A= 32 a->at at+1 A= 13 a->at at+1 RE . FERMU ( 18 ) D prilaboru_tekston A= 80 EL RE . FERMU ( 19 ) D E-KOMPILILO LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . D E-KOMPILILO skribu_tekston prilaboru_tekston RE . FERMU Tio estis la tria leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-003.exe (3K) (Startu poste dosieron 3.bat !)
La bildo bezonas 13 K !
Prilaboru tekston



Leciono 4


Ni skribu la sep fontotekstojn kaj storu ilin sur la spuroj 10, 14, 15, 16, 17, 18 kaj 19. Poste ni kompilu la tuton per EN-D 48 10 0 0 INIT EIN . ( 10 E-kompililo leciono 4 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 14 0 0 KOMPILU EN-D 0 15 0 0 KOMPILU EN-D 0 16 0 0 KOMPILU EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 14 ) D variabloj LOKO 127 EN RE 0 0 0 0 0 0 ( standarda enigo ) LOKO 126 EL RE 0 0 0 0 0 0 ( standarda eligo ) LOKO 125 0 0 0 0 0 ( sig = provizora storo por signo ) LOKO 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( teksto-bufro ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LOKO 123 ADR 124 ( tk = komenco de la teksto-bufro ) . FERMU ( 15 ) D a->at A-> LOKO 122 00 RE . ( at = aktuala pozicio en la teksto ) FERMU ( 16 ) D tk->at A<- MADR 123 A-> MADR 122 A<- AADR 123 A-> AADR 122 RE . D nova_linio A= 13 IRS ADR 126 A= 10 IRS ADR 126 RE . D en<-sig LOKO 0 IRS ADR 127 IR0 ADR 0 A-> ADR 125 RE . D sig=13? A= 9 A- 0 A<- ADR 125 A- 13 RE . D sig=8? A= 9 A- 0 A<- ADR 125 A- 8 RE . D sig->el A<- ADR 125 IRS ADR 126 RE . D at+1 A= 0 A+ 0 A<- MADR 122 A+ 1 A-> MADR 122 A<- AADR 122 A+ 0 A-> AADR 122 RE . D at-1 A= 9 A- 0 A<- MADR 122 A- 1 A-> MADR 122 A<- AADR 122 A- 0 A-> AADR 122 RE . FERMU ( 17 ) D skribu_tekston tk->at nova_linio LOKO 0 en<-sig sig=13? IR0 ADR 1 sig->el a->at at+1 sig=8? IR0 ADR 2 IRU ADR 0 LOKO 2 at-1 at-1 IRU ADR 0 LOKO 1 A= 32 a->at at+1 A= 13 a->at at+1 RE . ( *********************** ) D serchu_unuan_vortkomencon A= 32 EL A= 83 EL RE . D av=13? A= 32 EL A= 63 EL A= 65 EL LOKO 0 EN IR0 ADR 0 A- 13 RE . D eraro? A= 32 EL A= 63 EL A= 69 EL LOKO 0 EN IR0 ADR 0 A- 69 RE . D eraroprogramo A= 32 EL A= 69 EL RE . D prilaboru_sekvan_vorton A= 32 EL A= 112 EL RE . FERMU ( 18 ) D prilaboru_tekston serchu_unuan_vortkomencon LOKO 0 av=13? IR0 ADR 1 prilaboru_sekvan_vorton eraro? IR0 ADR 0 eraroprogramo RE LOKO 1 RE . FERMU ( 19 ) D E-KOMPILILO LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . D E-KOMPILILO skribu_tekston prilaboru_tekston RE . FERMU Tio estis la kvara leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-004.exe (3K) (Startu poste dosieron 4.bat !)
La bildo bezonas 17 K !
Prilaboru sekvan vorton



Leciono 5


Ni skribu la sep fontotekstojn kaj storu ilin sur la spuroj 10, 14, 15, 16, 17, 18 kaj 19. Poste ni kompilu la tuton per EN-D 48 10 0 0 INIT EIN . ( 10 E-kompililo leciono 5 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 14 0 0 KOMPILU EN-D 0 15 0 0 KOMPILU EN-D 0 16 0 0 KOMPILU EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 14 ) D variabloj LOKO 127 EN RE 0 0 0 0 0 0 ( standarda enigo ) LOKO 126 EL RE 0 0 0 0 0 0 ( standarda eligo ) LOKO 125 0 0 0 0 0 ( sig = provizora storo por signo ) LOKO 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( teksto-bufro ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LOKO 123 ADR 124 ( tk = komenco de la teksto-bufro ) LOKO 121 0 0 ( vk = komenco de la aktuala vorto ) LOKO 119 0 ( eraro? = numero de la eraro ) ( 0 = neniu eraro ) . FERMU ( 15 ) D a->at A-> LOKO 122 00 RE . ( at = aktuala pozicio en la teksto ) D a<-av A<- LOKO 120 00 RE . ( av = pozicio en la aktuala vorto ) FERMU ( 16 ) D tk->at A<- MADR 123 A-> MADR 122 A<- AADR 123 A-> AADR 122 RE . D nova_linio A= 13 IRS ADR 126 A= 10 IRS ADR 126 RE . D en<-sig LOKO 0 IRS ADR 127 IR0 ADR 0 A-> ADR 125 RE . D sig=13? A= 9 A- 0 A<- ADR 125 A- 13 RE . D sig=8? A= 9 A- 0 A<- ADR 125 A- 8 RE . D sig->el A<- ADR 125 IRS ADR 126 RE . D at+1 A= 0 A+ 0 A<- MADR 122 A+ 1 A-> MADR 122 A<- AADR 122 A+ 0 A-> AADR 122 RE . D at-1 A= 9 A- 0 A<- MADR 122 A- 1 A-> MADR 122 A<- AADR 122 A- 0 A-> AADR 122 RE . ( ***************************************************** ) D tk->av A= 32 EL A= 84 EL RE . D av=32? A= 32 EL A= 63 EL LOKO 0 EN IR0 ADR 0 A- 32 RE . D av->vk A= 32 EL A= 75 EL RE . D av+1 A= 32 EL A= 43 EL RE . FERMU ( 17 ) D skribu_tekston tk->at nova_linio LOKO 0 en<-sig sig=13? IR0 ADR 1 sig->el a->at at+1 sig=8? IR0 ADR 2 IRU ADR 0 LOKO 2 at-1 at-1 IRU ADR 0 LOKO 1 A= 32 a->at at+1 A= 13 a->at at+1 RE . ( *********************** ) D serchu_unuan_vortkomencon tk->av LOKO 0 av=32? IR0 ADR 1 av->vk RE LOKO 1 av+1 IRU ADR 0 . D av=13? A= 9 A- 0 a<-av A- 13 RE . ( Chu aktuala signo en vorto = 13? ) D eraro? A= 0 A+ 0 A<- ADR 119 A+ 0 RE . ( Chu okazis eraro ? ) D eraroprogramo A= 32 EL A= 33 EL RE . ( eligi !-signon kiam estas eraro ) D prilaboru_sekvan_vorton A= 32 EL A= 112 EL RE . FERMU ( 18 ) D prilaboru_tekston serchu_unuan_vortkomencon LOKO 0 av=13? IR0 ADR 1 prilaboru_sekvan_vorton eraro? IR0 ADR 0 eraroprogramo RE LOKO 1 RE . FERMU ( 19 ) D E-KOMPILILO LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . D E-KOMPILILO skribu_tekston prilaboru_tekston RE . D e=1 A= 1 A-> ADR 119 RE . D e=0 A= 0 A-> ADR 119 RE . FERMU Tio estis la kvina leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-005.exe (4K) (Startu poste dosieron 5.bat !)

Leciono 6

Ni skribu la sep fontotekstojn kaj storu ilin sur la spuroj 10, 14, 15, 16, 17, 18 kaj 19. Poste ni kompilu la tuton per EN-D 48 10 0 0 INIT EIN . ( 10 E-kompililo leciono 6 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 14 0 0 KOMPILU EN-D 0 15 0 0 KOMPILU EN-D 0 16 0 0 KOMPILU EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 14 ) D variabloj LOKO 127 EN RE 0 0 0 0 0 0 ( standarda enigo ) LOKO 126 EL RE 0 0 0 0 0 0 ( standarda eligo ) LOKO 125 0 0 0 0 0 ( sig = provizora storo por signo ) LOKO 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( teksto-bufro ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LOKO 123 ADR 124 ( tk = komenco de la teksto-bufro ) LOKO 121 0 0 ( vk = komenco de la aktuala vorto ) LOKO 119 0 ( eraro? = numero de la eraro ) ( 0 = neniu eraro ) . FERMU ( 15 ) D a->at A-> LOKO 122 00 RE . ( at = aktuala pozicio en la teksto ) D a<-av A<- LOKO 120 00 RE . ( av = pozicio en la aktuala vorto ) FERMU ( 16 ) D tk->at A<- MADR 123 A-> MADR 122 A<- AADR 123 A-> AADR 122 RE . D nova_linio A= 13 IRS ADR 126 A= 10 IRS ADR 126 RE . D en<-sig LOKO 0 IRS ADR 127 IR0 ADR 0 A-> ADR 125 RE . D sig=13? A= 9 A- 0 A<- ADR 125 A- 13 RE . D sig=8? A= 9 A- 0 A<- ADR 125 A- 8 RE . D sig->el A<- ADR 125 IRS ADR 126 RE . D at+1 A= 0 A+ 0 A<- MADR 122 A+ 1 A-> MADR 122 A<- AADR 122 A+ 0 A-> AADR 122 RE . D at-1 A= 9 A- 0 A<- MADR 122 A- 1 A-> MADR 122 A<- AADR 122 A- 0 A-> AADR 122 RE . ( ***************************************************** ) D tk->av A<- MADR 123 A-> MADR 120 A<- AADR 123 A-> AADR 120 RE . D av=32? A= 9 A- 0 a<-av A- 32 RE . D av->vk A<- MADR 120 A-> MADR 121 A<- AADR 120 A-> AADR 121 RE . D av+1 A<- MADR 120 A+ 1 A-> MADR 120 A<- AADR 120 A+ 0 A-> AADR 120 RE . ( ***************************************************** ) FERMU ( 17 ) D skribu_tekston tk->at nova_linio LOKO 0 en<-sig sig=13? IR0 ADR 1 sig->el a->at at+1 sig=8? IR0 ADR 2 IRU ADR 0 LOKO 2 at-1 at-1 IRU ADR 0 LOKO 1 A= 32 a->at at+1 A= 13 a->at at+1 RE . ( *********************** ) D serchu_unuan_vortkomencon tk->av LOKO 0 av=32? IR0 ADR 1 av->vk RE LOKO 1 av+1 IRU ADR 0 . D av=13? A= 9 A- 0 a<-av A- 13 RE . ( Chu aktuala signo en vorto = 13? ) D eraro? A= 0 A+ 0 A<- ADR 119 A+ 0 RE . ( Chu okazis eraro ? ) D eraroprogramo A= 32 EL A= 33 EL RE . ( eligi !-signon kiam estas eraro ) D prilaboru_sekvan_vorton A= 32 EL A= 112 EL RE . FERMU ( 18 ) D prilaboru_tekston serchu_unuan_vortkomencon LOKO 0 av=13? IR0 ADR 1 prilaboru_sekvan_vorton eraro? IR0 ADR 0 eraroprogramo RE LOKO 1 RE . FERMU ( 19 ) D E-KOMPILILO LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 . D E-KOMPILILO skribu_tekston prilaboru_tekston RE . D e=1 A= 1 A-> ADR 119 RE . D e=0 A= 0 A-> ADR 119 RE . FERMU Tio estis la sesa leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-006.exe (4K) (Startu poste dosieron 6.bat !)

Leciono 7

Ni skribu la sep fontotekstojn kaj storu ilin sur la spuroj 10, 14, 15, 16, 17, 18 kaj 19. Poste ni kompilu la tuton per EN-D 48 10 0 0 INIT EIN . ( 10 E-kompililo leciono 7 enigu per EN-D 48 10 0 0 INIT EIN ) EN-D 0 14 0 0 KOMPILU EN-D 0 15 0 0 KOMPILU EN-D 0 16 0 0 KOMPILU EN-D 0 17 0 0 KOMPILU EN-D 0 18 0 0 KOMPILU EN-D 0 19 0 0 KOMPILU AUS FERMU ( 14 ) D variabloj LOKO 127 EN RE 0 0 0 0 0 0 ( standarda enigo ) LOKO 126 EL RE 0 0 0 0 0 0 ( standarda eligo ) LOKO 125 0 0 0 0 0 ( sig = provizora storo por signo ) LOKO 124 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( teksto-bufro ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LOKO 123 ADR 124 ( tk = komenco de la teksto-bufro ) LOKO 121 0 0 ( vk = komenco de la aktuala vorto ) ( *********************** ) LOKO 119 0 ( eraro? = numero de la eraro ) ( 0 = neniu eraro ) ( *********************** ) LOKO 118 0 ( ekzist? 0 = vorto ne ekzistas ) LOKO 117 0 ( k-mod? 0 = aplikomodo 1 = kompilomodo ) LOKO 116 0 ( nombr? 0 = ne estas nombro ) LOKO 115 0 ( k-nro? 0 = ne kompilu nombron ) ( *********************** ) . FERMU ( 15 ) D a->at A-> LOKO 122 00 RE . ( at = aktuala pozicio en la teksto ) D a<-av A<- LOKO 120 00 RE . ( av = posicio en la aktuala vorto ) ( *********************** ) FERMU ( 16 ) D tk->at A<- MADR 123 A-> MADR 122 A<- AADR 123 A-> AADR 122 RE . D nova_linio A= 13 IRS ADR 126 A= 10 IRS ADR 126 RE . D en<-sig LOKO 0 IRS ADR 127 IR0 ADR 0 A-> ADR 125 RE . D sig=13? A= 9 A- 0 A<- ADR 125 A- 13 RE . D sig=8? A= 9 A- 0 A<- ADR 125 A- 8 RE . D sig->el A<- ADR 125 IRS ADR 126 RE . D at+1 A= 0 A+ 0 A<- MADR 122 A+ 1 A-> MADR 122 A<- AADR 122 A+ 0 A-> AADR 122 RE . D at-1 A= 9 A- 0 A<- MADR 122 A- 1 A-> MADR 122 A<- AADR 122 A- 0 A-> AADR 122 RE . ( *********************** ) D tk->av A<- MADR 123 A-> MADR 120 A<- AADR 123 A-> AADR 120 RE . D av=32? A= 9 A- 0 a<-av A- 32 RE . D av->vk A<- MADR 120 A-> MADR 121 A<- AADR 120 A-> AADR 121 RE . D av+1 A= 0 A+ 0 A<- MADR 120 A+ 1 A-> MADR 120 A<- AADR 120 A+ 0 A-> AADR 120 RE . ( *********************** ) D v? A= 0 A+ 0 A<- ADR 118 A+ 0 RE . D k? A= 0 A+ 0 A<- ADR 117 A+ 0 RE . D n? A= 0 A+ 0 A<- ADR 116 A+ 0 RE . D n->bf? A= 0 A+ 0 A<- ADR 115 A+ 0 RE . D komparu_chu_vorto_ekzistas A= 32 EL A= 75 EL A= 69 EL RE . ( "KE" ) D serchu_sekvan_vortkomencon A= 32 EL A= 83 EL A= 86 EL RE . ( "SV" ) D e=1 A= 1 A-> ADR 119 RE . D transformu_al_nombro A= 32 EL A= 84 EL A= 78 EL RE . ( "TN" ) D kompilu_nombron A= 32 EL A= 75 EL A= 78 EL RE . ( "KN" ) D al_kompilokodo A= 32 EL A= 65 EL A= 75 EL RE . ( "AK" ) D al_aplikokodo A= 32 EL A= 65 EL A= 65 EL RE . ( "AA" ) ( *********************** ) FERMU ( 17 ) D skribu_tekston tk->at nova_linio LOKO 0 en<-sig sig=13? IR0 ADR 1 sig->el a->at at+1 sig=8? IR0 ADR 2 IRU ADR 0 LOKO 2 at-1 at-1 IRU ADR 0 LOKO 1 A= 32 a->at at+1 A= 13 a->at at+1 RE . ( *********************** ) D serchu_unuan_vortkomencon tk->av LOKO 0 av=32? IR0 ADR 1 av->vk RE LOKO 1 av+1 IRU ADR 0 . D av=13? A= 9 A- 0 a<-av A- 13 RE . ( Chu aktuala signo en vorto =13? ) D eraro? A= 0 A+ 0 A<- ADR 119 A+ 0 RE . ( Chu okazis eraro? ) D eraroprogramo A= 32 EL A= 33 EL A= 0 A-> ADR 119 RE . ( eligi !-signon ) ( *********************** ) D prilaboru_sekvan_vorton komparu_chu_vorto_ekzistas v? IR0 ADR 0 k? IR0 ADR 1 al_kompilokodo IRU ADR 2 LOKO 1 al_aplikokodo IRU ADR 3 LOKO 0 transformu_al_nombro n? IR0 ADR 4 n->bf? IR0 ADR 5 IRU ADR 6 LOKO 5 kompilu_nombron LOKO 4 e=1 LOKO 2 LOKO 3 LOKO 6 LOKO 7 serchu_sekvan_vortkomencon RE . FERMU ( 18 ) D prilaboru_tekston serchu_unuan_vortkomencon LOKO 0 av=13? IR0 ADR 1 prilaboru_sekvan_vorton eraro? IR0 ADR 0 eraroprogramo RE LOKO 1 RE . FERMU ( 19 ) D E-KOMPILILO LOKO 0 skribu_tekston prilaboru_tekston IRU ADR 0 RE . D E-KOMPILILO skribu_tekston prilaboru_tekston RE . D e=0 A= 0 A-> ADR 119 RE . D k=1 A= 1 A-> ADR 117 RE . D k=0 A= 0 A-> ADR 117 RE . D n=1 A= 1 A-> ADR 116 RE . D n=0 A= 0 A-> ADR 116 RE . D n->bf=1 A= 1 A-> ADR 115 RE . D n->bf=0 A= 0 A-> ADR 115 RE . D v=1 A= 1 A-> ADR 118 RE . D v=0 A= 0 A-> ADR 118 RE . FERMU Tio estis la sepa leciono Se vi ne þatas tajpi mem la fontotekstojn vi povas alþuti la mem-malpakantan dosieron lec-007.exe (4K) (Startu poste dosieron 7.bat !) Baldaý sekvas la aliaj lecionoj!

zurueck / reen!