Diskuze: Překladač PL/0 - příkaz WRI - interpret

Ostatní jazyky Ostatní programovací jazyky Překladač PL/0 - příkaz WRI - interpret

Avatar
ipavelstraka
Člen
Avatar
ipavelstraka:

Zdravím, rád bych poprosil o pomoc/nasměrování s tímto úkolem. Jde o jazyk PL/0 - pomůcka pro výuku funkce překladačů. V základu rozumím tomu, jak překladač PL/0 funguje (co jeho jednotlivé instrukce znamenají), ale konkrétně s tímto úkolem si nevím rady.

Úkolem je:
Instrukce WRI 0 0 vypíše na obrazovku znak, jehož ASCII hodnota je na vrcholu zásobníku, a sníží ukazovátko vrcholu zásobníku o 1. Dejme tomu, že v zásobníku je uložen řetězec znaků (způsob uložení vymyslete). Napište posloupnost instrukcí, která libovolný takový řetězec vypíše na obrazovku.

Budu rád za každou radu, jak postupovat.
Děkuji.

 
Odpovědět 8.11.2014 23:41
Avatar
ipavelstraka
Člen
Avatar
ipavelstraka:

Má myšlenka je následující:

Uložení řetězce znaků:
Uživatel je vyzván k zadání počtu znaků, které by si přál zadat. Poté běží cyklus (a<POČET_ZNAKŮ) a pro každý jeho průchod je uživatel vyzván k zadání ASCII hodnoty znaku.

Vypsání řetězce znaků:
Opět běží cyklus a pomocí instrukce WRI 0 0 vypisuje znak z vrcholu zásobníku. Problém je ovšem v tom, že řetězec je samozřejmě otočený (např. zadaná posloupnost znaků A,B,C se vypíše jako CBA).

Bohužel nedovedu vymyslet způsob, jak řetězec otočit. Budu vděčný za každou radu.
Děkuji.

              INT 0 5
              &ECHO Zadejte delku retezce:
              REA 0 0
              STO 0 3
              LIT 0 1
              STO 0 4
@loop_nacti   LOD 0 4
              LOD 0 3
              OPR 0 13
              JMC 0 @konec_nacti
              &ECHO Zadejte ASCII kod retezce:
              REA 0 0
              LOD 0 4
              LIT 0 1
              OPR 0 2
              STO 0 4
              JMP 0 @loop_nacti
@konec_nacti  LIT 0 1
              STO 0 4
@loop_vypis   LOD 0 4
              LOD 0 3
              OPR 0 13
              JMC 0 @konec_vypis
              WRI 0 0
              LOD 0 4
              LIT 0 1
              OPR 0 2
              STO 0 4
              JMP 0 @loop_vypis
@konec_vypis RET 0 0
 
Nahoru Odpovědět 9.11.2014 2:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.