Arabic ang wika ng Paraiso? Anong wika ang sinalita ni Adan at bakit malamig sa paraiso? Anong wika ang sinasalita sa paraiso
Binuo ang adaptive language PARADISE ng interactive programming system na DSSP Moskovsky Pambansang Unibersidad Faculty of Computational Mathematics at Cybernetics N.P. Brusentsov, V.B. Zakharov, I.A. Rudnev, S.A. Sidorov, N.A. Chanyshev Moscow, 1987
Pangkalahatang paglalarawan ng wikang PARA
Layunin at layunin ng pag-unlad ng wika
Ang PARA (Evolved Adaptive Language) ay ang batayang wika ng DSSP Conversational System para sa Structured Programming. Basic - nangangahulugan ng pagiging batayan para sa lahat ng karagdagang mga konstruksyon na isinasagawa sa DSSP sa pamamagitan ng pagbuo (pagpapalawak, pagpapalakas) ng batayang wika at, marahil, pag-angkop sa mga nilikha sa ganitong paraan mga kasangkapan sa wika para sa isang partikular na aplikasyon. Taliwas sa tinatawag na mga wika mataas na lebel, ang PARADISE ay hindi nagbibigay ng mga yari na uri ng data at pagpapatakbo, ngunit mga elemento at primitive lamang para sa mahusay na pagtukoy sa mga kinakailangang uri. Halimbawa, ang mga orihinal na format ng data ay 8-bit byte, 16-bit na salita, at 32-bit na mahabang salita, na binibigyang-kahulugan depende sa mga operasyong isinagawa sa mga ito bilang mga integer, Boolean vectors, character code, logical value, data at procedure. mga payo. Sa kasong ito, posible, sa isang banda, na manipulahin ang mga indibidwal na bit ng byte at salita, at sa kabilang banda, upang bumuo ng pinagsama-samang mga yunit ng data (mga salita na maraming haba, mga vector, mga array, mga linya ng teksto, atbp.), pagtatakda ng isa o ibang interpretasyon para sa kanila ang pagpapakilala ng mga naaangkop na operasyon. Kaya, ang mga totoong numero ng kinakailangang haba at hanay ng mga halaga, kumplikadong mga numero at iba pang mga bagay ay maaaring ipakilala, at ang bersyon ng wikang nakatuon sa isang naibigay na application ay magsasama ng mga bagay at paraan na likas sa application na ito at hindi isasama kung ano ang hindi naaangkop dito - ang wika ay iaakma (naaangkop) sa aplikasyon. Ang pagbuo ng DSSP ay naglalayong lumikha ng isang malawak na magagamit at mahusay na microcomputer programming tool, i.e. mga computer batay sa microprocessors. Ang isang mahalagang tampok ng arkitektura ng mga microprocessor ay ang elementarya na katangian ng mga uri at operasyon ng data, na nangangahulugang, sa isang banda, pagiging pangkalahatan, at, sa kabilang banda, ang pagiging kumplikado ng programming. Dahil sa kanilang versatility, ang mga microprocessor at microcomputer na nakabatay sa mga ito ay may potensyal na walang limitasyong mga aplikasyon. Gayunpaman, ang praktikal na pagpapatupad ng mga posibilidad na ito ay pangunahing nakasalalay sa pagiging kumplikado ng pagbuo ng mga kinakailangang programa ng aplikasyon. Bukod dito, kasiya-siya mga programa sa aplikasyon maaari lamang gawin nang may malalim at banayad na kaalaman sa mga detalye ng kani-kanilang mga aplikasyon, i.e. dapat silang paunlarin hindi lamang ng mga programmer, ngunit ng mga highly qualified na espesyalista sa isang partikular na larangan. Samakatuwid, ang sistema ng programming ay hindi lamang dapat dagdagan ang pagiging produktibo ng mga programmer sa isang malaking lawak, ngunit maging napakasimple na maaari itong ma-master at epektibong magamit ng mga di-propesyonal na programmer.
Ang isang radikal na solusyon sa problemang ito ay, tila, isang makabuluhang pagpapasimple ng arkitektura ng computer. Ngunit, sa kasamaang-palad, ang arkitektura ng mga microcomputer ay umuunlad sa isang diametrically na kabaligtaran na direksyon - kasama ang landas ng pagtaas ng pagiging kumplikado at pagiging sopistikado, kaya hindi madali para sa isang propesyonal na programmer na makabisado ang wika ng microcomputer assembly ngayon. Ang mga programming language ng system tulad ng C o PL/M ay nabawasan ang pagiging kumplikado ng pagbuo ng software sa isang tiyak (bagaman malayo sa sapat) na lawak, ngunit halos hindi ito mairekomenda sa mga taong hindi nakaranas sa kalakalan ng programming. Ang isang malawak na naa-access na wika ay dapat, siyempre, maging mas simple at mas natural, ay dapat na nakabatay sa pinakakaraniwan, pamilyar na mga ideya tungkol sa kakanyahan at pamamaraan ng programming.
Bilang karagdagan sa pagiging naa-access at makabuluhang pagbawas sa pagiging kumplikado ng pagbuo ng mga programa kumpara sa programming sa assembly language, hinihiling ng DSSP ang universality ng wika, katulad ng sa assembly language, mataas na kahusayan ng makina (i.e., compactness at bilis ng code) , pagiging maaasahan ng verifiability ng mga nilikhang programa, at ang kanilang kadalian sa pagpapanatili, at modifiability, pati na rin ang mobility (portability) ng system at ang mga program na binuo dito sa mga makina ng iba't ibang mga arkitektura.
procedural programming
Ang pagprograma sa wikang PARADISE ay halos kapareho sa mga ganitong kalat na uri aktibidad ng tao bilang pagpaplano at pag-oorganisa ng magkakaugnay na mga aksyon, gawain, proseso o pagdidisenyo ng mga kumplikadong materyal na bagay - mga makina, yunit, istruktura. Tulad ng isang constructor na napagtatanto ang disenyo nito sa pamamagitan ng pagsasama-sama nito mga bahaging bumubuo(mga bloke, node, bahagi), ang programmer ay synthesize ang kinakailangang kumplikadong aksyon mula sa mga simpleng aksyon na ibinigay ng wika. Masasabi rin na ang programming (konstruksyon) ay binubuo sa unti-unting pagkabulok (decomposition) ng ipinatupad na bagay sa mas maliit at maliliit na bahagi.
Sa wika ng PARADISE, ang pangunahing "nakabubuo" ay isang pamamaraan - isang pinangalanang aksyon. Ang wika ay batay sa isang limitadong hanay ng mga pinakasimpleng pamamaraan (primitives) na kinakatawan ng kanilang sariling mga pangalan (notation). Halimbawa: + ay nangangahulugang "add", NEG ay nangangahulugang "reverse sign", VCTR ay nangangahulugang "lumikha ng vector". Sa partikular, may mga primitive: at; (colon at semicolon), na nagpapahintulot sa iyo na magpakilala ng isang bagong pamamaraan, halimbawa, pinangalanang P, na tinutukoy ito bilang isang pagkakasunud-sunod ng mga pamamaraan na P1, P2, ..., PN sa form
: P P1 P2 ... PN;
Kung ang pamamaraang P ay kumakatawan sa aksyon na dapat gawin ng nilikhang programa, ang pagbuo ng programang ito sa pamamagitan ng wikang PARA ay mababawasan sa sunud-sunod na pagdedetalye ng mga pamamaraang P1, P2, ..., PN. Nangangahulugan ito na ang bawat isa sa mga pamamaraang ito ay dapat tukuyin sa pamamagitan ng isang pagkakasunud-sunod ng mga mas maliliit na pamamaraan, na pagkatapos ay tinukoy sa pamamagitan ng mga pagkakasunud-sunod ng mas maliliit na pamamaraan, at iba pa, hanggang sa makuha ang mga kahulugan na binubuo lamang ng mga primitive.
Ang pagbuo na ito ng isang programa, simula sa ibinigay na layunin at unti-unting paghiwa-hiwalayin ang mga pamamaraang ginagamit sa antas ng mga pangunahing tampok ng wika, ay kilala bilang top-down na programming. Ito ang pangunahing paraan upang makakuha ng mga programa sa wikang PARADISE para sa paglutas ng mga indibidwal, mahusay na tinukoy na mga gawain. Ang kabaligtaran ay bottom-up programming - pagbuo sa batayan ng pangunahing wika ng isang sistema ng unti-unting pinalaki na mga pamamaraan na nakatuon sa isang tiyak na lugar ng problema. Sa ganitong paraan, ang pagbuo ng wika at ang pagbagay nito sa isang partikular na aplikasyon ay isinasagawa.
Sa parehong mga kaso, ang maingat na pag-istruktura ng mga program na nilikha ay mahalaga: bawat programa at bawat bahagi ng programa ay dapat na binubuo ng isang maliit na bilang ng mga hiwalay na bahagi, bawat isa ay gumaganap ng isang partikular na function at nagbibigay-daan sa autonomous na pag-verify. Kaugnay ng wikang PARA, nangangahulugan ito, sa partikular, na ang mga kahulugan ng mga pamamaraan ay dapat na maikli: ang pagkakasunud-sunod ng pagtukoy, bilang panuntunan, ay hindi dapat maglaman ng higit sa 5-7 miyembro. Ang pag-istruktura ay nagbibigay ng kakayahang maunawaan, masusubok at mabago ng programa, na makabuluhang binabawasan ang pagiging kumplikado ng paglikha at pagpapanatili nito.
Ang halimbawa sa itaas ng pagtukoy ng isang pamamaraan P ay isang pinasimple. Sa katunayan, ang pagkakasunud-sunod ng pagtukoy ay maaaring maglaman bilang mga miyembro hindi lamang ang mga pangalan ng mga pamamaraan, kundi pati na rin ang mga reseta (mga utos) na binubuo ng higit sa isang salita. Ang pangalan ng isang pamamaraan, na ginamit nang walang kumbinasyon sa ibang mga salita, ay isang utos upang isagawa ang pamamaraang itinalaga nito. Ang pagkakasunud-sunod ng mga pangalan ng pamamaraan ay nagtuturo sa pagpapatupad ng mga pamamaraang ito sa pagkakasunud-sunod ng kanilang mga pangalan nang sunud-sunod (sa linear na pagkakasunud-sunod). Upang magtakda ng iba pang mga pagkakasunud-sunod ng pagpapatupad, ang PARA ay nagbibigay ng mga espesyal na salita (mga prefix) na nagrereseta sa pagpapatupad ng mga pamamaraan na pinangalanang kasama ng mga ito, depende sa tinukoy na kondisyon, pati na rin ang maramihang (cyclic) na pagpapatupad ng pamamaraan.
Halimbawa, ang linear sequence na P0 P1 ay nagiging sanhi ng pagpapatupad ng procedure P0 at pagkatapos ay ang execution ng procedure P1. Kung ang pamamaraan na P1 ay hindi dapat palaging isagawa, ngunit kung ang isang positibong numero ay nakuha bilang isang resulta ng pagpapatupad ng P0, kung gayon sa halip na P1, ang utos ng pagpapatupad ay isinulat ayon sa kondisyon: KUNG + P1, i.e. sa halip na P0 P1 ito ay magiging P0 KUNG + P1. Kasama sa PARA ang isang hanay ng mga prefix-condition na nagbibigay-daan sa iyong epektibong ipahayag ang pagpapatupad ng isang kundisyon, pati na rin ang pagpili ng dalawa, tatlo o higit pang mga pamamaraan.
Ang maramihang pagpapatupad ng isang pamamaraan ay tinukoy gamit ang RP prefix. Kaya, ang utos ng RP P ay nagdudulot ng paulit-ulit na pagpapatupad ng procedure P hanggang sa malikha ang mga kondisyon kung saan na-trigger ang EX na nakapaloob sa katawan ng pamamaraang ito - ang paglabas mula sa loop, pagkatapos nito ang susunod na utos sa isang linear na pagkakasunud-sunod ay pinaandar. Ang kundisyon para sa pag-alis sa loop ay maaaring, halimbawa, ang pagkakapantay-pantay sa zero ng ilang variable X, na ipinahayag bilang:
Ang isang pamamaraan na ang pangalan ay kasama sa kahulugan ng isa pang pamamaraan ay tinatawag na nested dito. Ang isang nested procedure, kung ito ay hindi primitive, ay maaaring maglaman ng mga nested procedure, i.e. maaaring maramihan ang nesting. Bilang karagdagan, ang mga patakaran ng wikang PARA ay hindi nagbabawal sa pagsasama sa kahulugan ng isang pamamaraan ng sarili nitong pangalan o ang pangalan ng isang pamamaraan na naglalaman ng pangalang ito, i.e. Pinapayagan ng PARA ang pag-uulit.
Ang isang paulit-ulit na naisakatuparan na pamamaraan ay maaari ding ilagay sa loob ng isang paulit-ulit na isinasagawang pamamaraan. Sa kasong ito, nagaganap ang nesting ng mga loop. Ang PARADISE ay nagbibigay-daan sa maramihang nesting ng mga loop.
Linear sequence ng mga command, nesting, conditional at cyclic nesting ng mga procedure - inuubos nito ang mga posibilidad ng pagbuo ng mga programa sa wikang RAYA. Ang kakulangan, homogeneity at pagiging natural ng mga paraan na ito ay ang susi sa kadalian ng mastering at paggamit ng wika. Kasabay nito, ito ay isang mahigpit na structured programming language na nagbibigay ng makabuluhang pagbawas sa pagiging kumplikado ng pagbuo at pagiging maaasahan ng mga programa.
Mga Pamamaraan at Data
Ang lahat ng nasabi sa ngayon ay isang katangian ng wikang PARADISE bilang isang paraan ng pagrereseta ng mga aksyon, pagbuo ng mga arbitrary na aksyon mula sa isang may hangganang hanay ng mga primitive na operasyon. Ang kabilang panig ng wika ay ang paraan ng pagkatawan sa mga bagay kung saan ang mga aksyon, ibig sabihin presentasyon at organisasyon ng datos.
Ang isang napakasimpleng elemento ng data ay isang elementong may dalawang halaga - medyo. Ang mga bit ay ang mga bloke ng gusali ng lahat ng iba pang mga format at uri ng data. Sa wikang PARADISE, ang 8-bit na byte, 16-bit na salita at 32-bit na mahabang salita ay tinatanggap bilang mga pangunahing format. Depende sa mga operasyong isinagawa sa kanila, ang mga byte, salita, at longword ay napapailalim sa maraming interpretasyon, i.e. maaaring magsilbing batayan para sa iba't ibang uri datos. Bilang karagdagan, sila ang mga paunang elemento para sa pagbuo ng mga pinagsama-samang format at uri.
Sa totoo lang, ang PARADISE ay hindi naglalaman ng alinman sa simple o pinagsama-samang mga uri ng data - mayroon lamang mga pangunahing format (byte, salita, mahabang salita) at paraan para sa pagbuo ng mga composite na format mula sa kanila: mga vector at multidimensional na array. Sa kasong ito, ang parehong mga byte (mga salita, mahabang salita), depende sa mga operasyong isinagawa sa mga ito, ay binibigyang-kahulugan bilang mga vector ng mga bit, o bilang mga binary integer na may o walang sign, o bilang mga titik ng input/output na alpabeto, atbp. Ang mga uri ng data at ang nauugnay na mga hadlang at pagsusuri ng mga ito ay maaaring ipakilala sa mga extension ng wika na tukoy sa domain.
Sa base na wika, ang deklarasyon ng mga pangalan ng data ay gumaganap lamang ng function ng pagbibigay ng access sa data sa pamamagitan ng pangalan: ang bilang ng mga memory cell na kinakailangan ng deklarasyon at ang mekanismo para sa pag-access sa mga ito ay nauugnay sa pangalan. Ang mga pagsubok at pagpapatakbo ng pagbabago ay hindi direktang inilalapat sa pinangalanang data. Ang mga operasyong ito ay tinukoy sa operand stack, na isang pagkakasunud-sunod ng 32-bit na mahabang salita (mga elemento ng stack) na dynamic na binago sa pamamagitan ng pagdaragdag (pagtulak) ng mga bagong elemento sa dulo nito, pati na rin ang pag-alis ng mga elemento mula sa parehong dulo (popping ito mula sa salansan). Ang mga elemento ay binawi sa kabaligtaran na pagkakasunud-sunod sa kung saan sila ipinadala: ang huling ipinadala ay unang binawi. Ang data na susuriin o babaguhin ay ipinadala sa stack, kung saan ang mga iniresetang operasyon ay isinasagawa sa kanila, pagkatapos nito ay maaaring alisin ang mga resulta ng pagproseso mula sa stack.
Halimbawa, kung mayroong isang variable na X na idineklara bilang isang 32-bit na mahabang salita, pagkatapos ay dalawang operasyon lamang ang maaaring direktang gawin dito:
1) itulak ang halaga nito sa stack, na awtomatikong nangyayari sa tuwing binabanggit ang pangalang X,
2) italaga ito sa pangkat! Ang X value ng huling (nangungunang) elemento na ilalabas mula sa stack.
Kung, sabihin nating, gusto mong i-double ang halaga ng X sa pamamagitan ng pagdaragdag nito sa sarili nito, magagawa mo ito sa pamamagitan ng pagsasagawa ng mga sumusunod na utos nang sunud-sunod:
Dalawang pagkakataon ng halaga ng X ang itutulak sa stack, pagkatapos ay aalisin ng + command ang mga ito, idagdag ang mga ito at itulak ang resultang halaga sa stack, pagkatapos nito ang command! Babawiin ng X ang halagang ito at itatalaga ang halaga nito sa variable X.
Ang karaniwan para sa mataas na antas ng mga wika sa pagsulat ng ibinigay na halimbawa sa anyo X:=X+X ay mas pamilyar sa programmer, ngunit ito ay hindi direktang pagmuni-muni ng pagkakasunud-sunod ng mga utos na isinagawa ng processor, ngunit ito ay isang uri ng mathematical formula. Ito ay maginhawa kapag ang mga problema sa pag-compute ng programming, gayunpaman, sa base na wika, ang isa-sa-isang pagsusulatan sa mga utos na isinasagawa ay tila mas mahalaga, dahil ang programa ay maaaring suriin ng command-by-command nang direkta sa programming language at sa pangkalahatan ay hindi kinakailangang malaman ang isang wika maliban sa wika ng processor.
Ngunit ang isang partikular na mahalagang pakinabang ng data stacking ay ang pagsubok at mga pamamaraan ng pagbabagong-anyo ay maaaring tukuyin at ipatupad nang hiwalay sa data kung saan inilalapat ang mga ito. Ang mga pagpapatakbo ng pagsubok at pagbabagong-anyo ay nabuo hindi nauugnay sa mga identifier ng data (o mga pangalan ng mga constant at variable, pormal na mga parameter), ngunit may kaugnayan sa mga elemento ng stack, kung saan ang mga halaga ng operand ay dapat italaga sa oras na gumanap ang operasyon. Halimbawa, ang pagpapatakbo ng pagdaragdag ng dalawang numero, na isinagawa ng + (add) command, ay binubuo sa pagkuha ng nangungunang dalawang elemento (itaas at ibaba) bilang mga summand mula sa stack, pagkalkula ng kanilang kabuuan at pagpapadala nito sa stack. Upang magdagdag ng dalawang numero, kailangan mong ipadala ang kanilang mga halaga sa stack at isagawa ang + command, ang resulta ay nasa tuktok ng stack.
Ang isang pagsubok-transform na pamamaraan na may di-makatwirang bilang ng mga parameter ng input at output ay maaaring tukuyin lamang bilang isang pinangalanang aksyon (nang walang listahan ng mga parameter) na isinagawa sa isang stack na naglalaman ng mga halaga ng argumento sa tinukoy na pagkakasunud-sunod at, pagkatapos ng pagpapatupad, ang mga halaga ng resulta. Upang mailapat ang naturang pamamaraan sa isa o isa pang hanay ng partikular na data, kinakailangang ipadala ang mga data na ito sa naaangkop na pagkakasunod-sunod papunta sa stack. Ang pagkakaroon ng natupok ang mga ito, ang pamamaraan ay mag-iiwan sa stack (na matatagpuan din sa isang tiyak na pagkakasunud-sunod) ang mga resulta nito.
Sa madaling salita, ang mga pangalan ng mga pamamaraan sa wikang PARA ay ginagamit sa parehong paraan tulad ng mga palatandaan ng mga operasyon at mahalagang mga simbolo ng mga operasyon na may arbitrary na bilang ng mga operand. Alinsunod sa prinsipyo ng pagpapatakbo ng stack, ang mga operasyon ay nakasulat sa postfix form, i.e. Ang pangalan ng isang operasyon ay inilalagay pagkatapos ng listahan ng mga pangalan o halaga ng mga operand nito. Halimbawa, kung tinutukoy natin ang operasyon ng pagkuha ng kabuuan ng tatlong numero na may simbolo na ++, kung gayon ang kabuuan ng mga numerong A, 5 at B ay ipapahayag bilang mga sumusunod:
Posibleng magtatag ng mga pormal na tuntunin ng wikang postfix at magabayan sila kapag nagsusulat ng mga programa, ngunit mas madali at mas maaasahan para sa isang tao na makitungo hindi sa mga patakaran, ngunit sa modelo ng stack processor, i.e. kasama ang modelo ng makina kung saan nilikha ang mga programa at kung saan ipapatupad ang mga ito. Sa kaso ng wikang PARA, ang naturang makina ay isang DSSP processor - isang set ng hardware at mga programa na nagpapatupad ng mga aksyon na inireseta sa wikang ito.
DSSP processor
Sa pisikal, ang DSSP processor ay maaaring ipatupad sa anyo ng isang microprocessor ng simple at mahusay na programmable na arkitektura na gagawing posible upang malutas ang problema ng microcomputer software sa pinakamahusay na posibleng paraan. Ngunit ang naturang microprocessor ay hindi pa nagagawa, at ang arkitektura nito ay kailangang tularan sa mga umiiral nang microcomputer upang mapabuti ang kanilang programmability. Siyempre, ang pagtulad ay nauugnay sa mga gastos - nangangailangan ito ng memorya at oras ng computer, ngunit sa kaso ng pagtulad sa isang PRSP processor, ang mga gastos na ito ay medyo maliit.
Mula sa punto ng view ng programmer, ang katangian ng isang processor ay ang arkitektura nito, i.e. impormasyon tungkol sa kung ano ang processor na ito bilang isang tool sa pagpoproseso ng data, ano ang mga posibilidad para sa pagpapakita ng data sa input at sa loob ng processor, ano ang mga pagsubok at pagpapatakbo ng conversion ng data, kung paano inayos ang sariling memorya ng processor, pati na rin ang pag-access sa ang pangunahing at panlabas na memorya, ano ang mga kontrol sa kurso ng programa, pakikipag-ugnayan sa panlabas na kapaligiran, tugon sa mga pambihirang kaganapan, atbp. Ang karunungan sa arkitektura ay kinakailangang kondisyon makabuluhang (impormal) na programming, na makabuluhang binabawasan ang bilang ng mga error at pinatataas ang pagiging maaasahan ng mga programa.
Ang sentral na elemento ng DSSP processor ay ang nabanggit na operand stack. Sa totoo lang, ang pagproseso ay ginagawa sa stack at, bilang panuntunan, ang data ay inililipat sa pamamagitan ng stack. Ang mga indibidwal na utos at maikling pagkakasunud-sunod ng mga utos sa itaas ng stack ay maaaring isagawa sa pamamagitan ng pagbibigay ng mga ito sa input ng processor nang direkta mula sa terminal keyboard. Sa kasong ito, ginagaya ng processor ng DSSP ang pagpapatakbo ng isang postfix calculator. Ang mga numerong ipinasok mula sa keyboard at mnemonic code ng mga operasyon ay pinaghihiwalay ng mga puwang. Ang ipinasok na teksto ay ipinapakita bilang isang string sa terminal screen. Ang signal para sa pagtatapos ng input at ang utos sa processor na "Ipatupad ang ipinasok na pagtuturo" ay pagpindot sa key
Halimbawa, upang suriin ang expression (2-5)*3 at ipakita ang resulta, ilagay ang:
2 5 - 3 * .
Matapos pindutin ang key
* 2 5 - 3 * . -90
Ang isang asterisk sa simula ng isang linya ay ibinibigay ng processor bilang isang senyas na ito ay naghihintay para sa input.
Sa isinasaalang-alang na halimbawa, nakita at pinoproseso ng processor ang mga ipinasok na numero bilang mga decimal integer. Sa katunayan, kapag nag-input, ang mga numerong ito ay na-convert sa binary complementary code, at kapag nag-output, sila ay na-convert pabalik sa decimal. Ang PRSP processor ay nagpapahintulot din sa binary, octal, at hexadecimal I/O modes. Upang lumipat sa nais na mode, dapat mong isagawa ang isa sa mga utos na B2, B8, B10, B16, ayon sa pagkakabanggit.
Ang pagpindot sa mga key ay nagiging sanhi ng pag-input ng mga code ng processor na kumakatawan sa mga titik na ipinahiwatig sa mga key na ito (mga titik, numero, mga bantas, mga simbolo ng pagpapatakbo). Ang pagkakasunud-sunod ng mga input na character ay bumubuo ng isang input string - isang hanay ng mga byte na naglalaman ng mga code ng character, isang byte bawat character. Ang maximum na haba ng input string ay 80 character.
Pinoproseso ang input string, kinukuha ng processor ang mga salita sa loob nito - mga kumbinasyon ng mga titik na pinaghihiwalay ng mga puwang sa bawat isa, at binibigyang kahulugan ang mga ito. Kung ang salitang pinoproseso ay ang pangalan ng isang operasyon (pamamaraan) o ibinigay na pangalan na kilala sa processor, kung gayon ang processor ay nagsasagawa ng mga aksyon na, ayon sa kahulugan, dapat tawagin ng pangalang ito. Kung ang salita ay hindi kilala sa processor, pagkatapos ay sinusubukan nitong bigyang-kahulugan ito bilang isang numero, isinasaalang-alang ang set input / output mode.
Ang mga numero ay mga salita na binubuo ng mga digit na katanggap-tanggap sa isang ibinigay na sistema ng numero at, marahil, naglalaman ng minus sign bilang unang titik. Sa hexadecimal input/output mode, ang mga Latin na letrang A, B, C, D, E, F ay may bisa din kasama ng mga digit. Ang natanggap na numero ay kino-convert sa dalawa at ipinadala sa operand stack bilang isang 32-bit na mahabang salita. Sa kasong ito, kung ang halaga ng numero ay nasa labas ng saklaw ng mga kinakatawan na halaga -2147483648: 2147483647, pagkatapos ay papalitan ito ng isang maihahambing na halaga na modulo 2**32 mula sa hanay na ito.
Kung sakaling hindi kilala ng processor ang naprosesong salita at hindi matatanggap bilang numero, magpapakita ang processor ng mensahe sa terminal screen: "Hindi ko alam<обрабатываемое слово>at naghihintay ng karagdagang mga tagubilin.
Ang input ng data sa anyo ng arbitrary text (sequence of bytes-literals) ay ginawa sa anyo ng text literals, na mga text na nakapaloob sa double quotes, halimbawa: "Text literal". Ang pagtanggap ng isang literal na teksto sa input ng processor ay nagiging sanhi ng tekstong nakapaloob sa pagitan ng mga quote na maisulat sa pangunahing memorya sa anyo ng isang string ng mga bytes-litro. Sa kasong ito, ang address ng unang byte at ang bilang ng mga byte (ang haba ng teksto) ay itinutulak sa stack. Ang literal na teksto na pinangungunahan ng isang tuldok ay binibigyang-kahulugan ng processor bilang isang utos na "ilagay ang teksto sa pagitan ng mga quote sa terminal screen". Halimbawa, ang pagbibigay sa processor ng input ng kumbinasyon ng character na "Walang memorya" ay magiging sanhi ng paglabas ng mensahe sa screen: Walang memorya.
Ang code ng isang character ay itinutulak sa stack bilang mababang byte ng tuktok kapag ang character na ito ay dumating sa input ng processor, kasama ang # sign na nauuna nito. Halimbawa, ang kumbinasyon ng character na #L ay magpapadala ng code ng letrang L sa stack, ang kumbinasyon ng character #5 ay magpapadala ng code ng numero 5. Ang TOB command na mag-output ng isang byte sa terminal ay nagpapakita ng character na ang code ay na nakapaloob sa mababang byte ng tuktok ng stack.
Kahit na sa direct execution mode, ang PRSP processor ay higit na lumalampas sa mga kakayahan ng isang conventional calculator, na nagbibigay sa user, bilang karagdagan sa mga operasyon sa pagpoproseso ng data, na may paraan ng pagdedeklara ng pinangalanang data at pagtukoy ng mga pamamaraan na pagkatapos ay magagamit kasama ng mga pangunahing operasyon. Ang pagdedeklara ng mga pangalan ng data at pagtukoy ng mga pamamaraan ay ginagawa gamit ang mga espesyal na utos.
Halimbawa, upang lumikha ng 16-bit na variable na may pangalan, sabihin nating, TEMP, dapat kang mag-type sa keyboard at mag-apply sa input ng processor gamit ang key.
VAR TEMP
Maaari kang, kasama ng deklarasyon, magtalaga ng paunang halaga sa variable, halimbawa, 0:
VAR TEMP 0 ! TEMP
Ngayon ang pagdating ng pangalang TEMP sa input ng processor ay magiging sanhi ng kasalukuyang halaga ng variable na ito na itulak sa stack, at ang pagtatalaga ng isang bagong halaga dito, na inalis mula sa stack, ay maaaring gawin sa pamamagitan ng command! TEMP.
Ang kahulugan ng isang pamamaraan ay ipinakilala sa pamamagitan ng utos: (colon) na naglalaman ng pangalan ng pamamaraan na tinukoy at pagtukoy ng isang hanay ng mga utos na may isang titik; (semicolon) bilang end-of-definition character. Ipakita natin ang kahulugan at paggamit ng mga pamamaraan gamit ang halimbawa ng pagkalkula ng factorial ng isang natural na bilang N sa pamamagitan ng formula
N!=N*(N-1)*(N-2)*...*2*1, i.e. N-1 multiplikasyon.
Ang pamamaraan ng FCT upang makuha ang nais na resulta ay dapat na i-multiply ang ibinigay na numero N sa pamamagitan ng sunud-sunod na pagbaba ng mga numero, simula sa N-1 hanggang 1, i.e. N-1 beses lang. Sa PARA, ito ay nakaprograma sa pamamagitan ng pagsasagawa ng procedure P t beses: DO P, kung saan ang P ay ang pangalan ng procedure, t ay ang kasalukuyang halaga ng tuktok ng stack, na nagpapahiwatig kung gaano karaming beses ang procedure P kailangang isagawa.
Ipagpalagay na bago ilapat ang pamamaraan ng FCT, ang numero N ay itinulak sa stack at nasa tuktok nito. Upang gawing mas maliwanag ang pamamaraan, nagpapakita kami ng isang nababagong multiplier ng variable K:
Ipinakilala namin ang kahulugan ng pamamaraan ng FCT sa form:
FCT [N] ! K K K 1-DO F . [N] ;
Ang mga komento sa mga square bracket ay nagpapakita ng kasalukuyang estado ng operand stack. Team! Ang K, na nagsisimula sa tinukoy na pamamaraan, ay nagtatalaga ng halaga ng numerong N na kinuha mula sa stack patungo sa variable na K. Pagkatapos ay itinulak ang K sa stack ng dalawang beses at sa pamamagitan ng pagbabawas ng 1 sa tuktok ng stack, ang bilang ng mga pagpapatupad ng paulit-ulit pamamaraan F katumbas ng N-1 ay nabuo. Sinusundan ito ng utos ng DO F, na nagrereseta ng isang loop, pagkatapos nito ang tuktok ng stack ay maglalaman ng nais na halaga ng factorial - N!. Koponan. (tuldok) ay nagpapakita ng isang kopya ng halagang ito sa terminal screen. Nananatili itong tukuyin ang isang pamamaraan F na nagbabago sa halaga ng K sa pamamagitan ng pagbabawas ng 1 at pagpaparami ng K sa bahagyang resulta ng pagkalkula ng R na nilalaman sa stack. :
F [R] K 1- ! K [R] K * ;
Ang kawastuhan ng parehong mga pamamaraan ay sinusuri sa pamamagitan ng pagpapatupad ng kanilang mga kahulugan command-by-command, pagpapakita ng mga nilalaman ng operand stack at ang halaga ng variable K sa terminal screen pagkatapos ng bawat command. Sa pagkumpleto ng FCT procedure, ang tuktok ng Ang stack ay dapat maglaman ng halaga N!, at ang halaga ng variable K ay dapat na katumbas ng 1.
Sinuri at naitama (kung may nakitang mga error sa panahon ng proseso ng pag-verify) ang mga pamamaraan ay sinusuri sa pamamagitan ng paglalapat ng mga ito sa mga indibidwal na halaga ng numerong N. Dahil ang pamamaraan F ay naka-nest sa FCT, ang pagsubok nito ay awtomatikong isinasagawa sa proseso ng pagsubok ang huli. Dapat tandaan na ang mga halaga ng resulta ay hindi dapat lumampas sa maximum na positibong numero na kinakatawan sa complement code ng dalawa ng isang 32-bit na mahabang salita: 2147483647, i.e. Ang FCT ay nagbibigay lamang ng mga tamang resulta para sa N=1, ..., 13.
Ang paggamit ng FCT ay hindi naiiba sa paggamit ng katutubong mga tagubilin sa processor: upang makuha ang resulta, kailangan mong tukuyin ang halaga ng operand at ipasok ang pangalan ng pamamaraan:
5 FCT
7 FCT
Ang pagpapatupad sa itaas ng pamamaraan ng FCT ay nangangailangan ng pagpapakilala ng isang auxiliary variable K, gayunpaman, ang isang functionally equivalent procedure ay maaaring isagawa nang walang auxiliary variable, gamit ang operation C, na nagtutulak ng kopya ng vertex nito papunta sa stack, at ang mga operasyon. E2 at E3, na nagpapalitan ng vertex sa pangalawa at pangatlong elemento ng stack, ayon sa pagkakabanggit. Ang kahulugan ng pamamaraang ito ay ang mga sumusunod.
: FCTA [N] C 1- C DO FA D . ;
: FA C E3 * E2 1- ;
Ang bentahe ng naturang "purong stack" na pamamaraan ay ang kumpletong awtonomiya nito: tulad ng mga pangunahing pagpapatakbo ng stack ng processor, ito ay ginaganap lamang sa operand stack, nang hindi nangangailangan ng iba pang memorya at hindi nagiging sanhi ng anumang mga pagbabago sa iba pang mga bahagi ng processor.
Ang mga pangalan ng tinukoy na mga pamamaraan at ipinahayag na data ay ipinasok sa diksyunaryo ng processor, na nagtatatag ng koneksyon sa pagitan ng mga pangalang ito at pinangalanang mga bagay, iyon ay, kasama ang mga katawan ng mga pamamaraan na matatagpuan sa pangunahing memorya at may mga elemento ng memorya na ito na inilalaan para sa pag-iimbak ng ipinahayag na data. . Ang pagpoproseso ng susunod na salita mula sa input stream, ang processor ay tumitingin sa diksyunaryo at, na nakahanap ng katugmang salita dito, nagsasagawa ng mga aksyon na nauugnay sa salitang ito. Kung ang paghahanap ay naging hindi matagumpay, kung gayon, tulad ng nabanggit na, ang isang pagtatangka ay ginawa sa numeric na interpretasyon ng ibinigay na salita, at kung nabigo ito, pagkatapos ay isang mensahe ang sumusunod na ang salita ay hindi kilala sa processor.
Bilang resulta ng pagsasama-sama ng isang kahulugan ng pamamaraan, ang pangalan ng pamamaraang ito at ang pointer (address) ng katawan nito, na isang pagkakasunud-sunod ng mga pointer ng mga pamamaraan at data na bumubuo sa kahulugan, ay ipinasok sa diksyunaryo. Sa madaling salita, ang panloob na representasyon ng katawan ng isang pamamaraan ay nakuha sa pamamagitan ng pagpapalit ng mga pangalan ng mga pamamaraan at data sa kahulugan nito ng mga pointer sa kaukulang mga katawan, na kung saan ay ang parehong mga pagkakasunud-sunod ng mga pointer, at sa kaso ng mga primitives, kadena ng mga tagubilin sa makina. Tinatawag namin itong panloob na representasyon ng procedural code ng programa.
Kapag, kasama ang pagsasama-sama ng kahulugan ng pamamaraan P, ang mga kahulugan ng lahat ng dati nang hindi kilalang nested na pamamaraan ay pinagsama-sama rin, pagkatapos ay isang kumpletong hierarchy ng mga pointer ay nabuo, na nagsisiguro ng posibilidad ng pagpapatupad ng pamamaraan P sa pamamagitan ng pagbibigay lamang ng pangalan nito sa ang input ng processor. Sa kasong ito, ang mga pangalan ng mga nested na pamamaraan na pinagsama-sama na may kaugnayan sa kahulugan ng P, kung hindi mo kailangang i-access ang mga pamamaraang ito nang hiwalay, walang punto sa pag-iimbak ng mga ito sa diksyunaryo. Sa ilang mga kaso, lumalabas na angkop na harangan ang pag-access sa isa o ibang bahagi ng diksyunaryo, na iniiwan, marahil, ang kakayahang magsagawa lamang ng ilang mga pamamaraan.
Upang matugunan ang mga naturang kinakailangan, ang diksyunaryo ay ipinatupad bilang isang koleksyon ng mga subdictionaries, kung saan ang mga operasyon ay tinukoy na nagbibigay-daan sa paglikha at pagsira ng mga subdictionaries at kanilang mga bahagi, pagtanggal ng mga pangalan, pagsasara at pagbubukas ng access sa ilang mga subdictionaries. Ang bawat subdictionary ay may pangalan na ginagamit sa mga utos na nauugnay dito. Ang mga pangalan ng subdictionary ay dapat magsimula sa titik na $, halimbawa: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.
Ang subdictionary ng $PRIME, na naglalaman ng pangunahing hanay ng mga PRSP na salita, ay bukas pagkatapos simulan ang processor para sa parehong pag-access sa mga salitang nakapaloob dito at para sa muling pagdadagdag ng mga bagong salita. Ang mga bagong salita na ipinasok dito, kung kinakailangan, ay maaaring tanggalin kasama ng mga katawan na nauugnay sa kanila gamit ang FORGET $PRIME command. Pagkatapos nito, ang posibilidad ng karagdagang pagdaragdag ng mga salita sa subdictionary na ito ay tinitiyak sa pamamagitan ng pagpapatupad ng GROW $PRIME na utos, na nagbibigay-daan sa iyong palakihin muli ang $PRIME subdictionary, at lahat ng bagay na nakapasok dito ay maaaring muling tanggalin ng FORGET $PRIME command, atbp. . Sa mode na ito, ginagamit ang PRSP kapag nag-eeksperimento sa maliliit na fragment ng mga programa, indibidwal na mga halimbawa, mga pagtatantya, at gayundin, kung kinakailangan, upang isama ang mga bagong salita sa $PRIME subdictionary sa pagkakasunud-sunod ng pagbuo ng system language.
Sa kaso ng paglikha ng isang hiwalay na programa, bumubuo sila ng kanilang sariling subdictionary para dito, at ito ay nakamit sa pamamagitan ng katotohanan na ang teksto ng programa ay nagsisimula sa utos.
PROGRAMA$<имя программы>
Itinuturing ng isang tao ang utos na ito bilang isang heading, na sinusundan ng isang komento sa mga square bracket, na naglalarawan sa ilang salita sa pagpapaandar na ipinatupad ng programa. Para sa processor, ito ay katumbas ng isang pagkakasunod-sunod ng mga tagubilin
KALIMUTAN$<имя>LUMAGO $<имя>
Samakatuwid, ang bawat pagtanggap ng teksto ng programa sa input ng processor ay magiging sanhi ng pag-alis nito nakaraang bersyon at bubuksan ang na-clear na diksyunaryo para sa pagpasok bagong bersyon program na may parehong pangalan. Ito ay maginhawa kapag gumagawa ng mga pagwawasto sa nilikha na programa, pati na rin kapag binago ito sa hinaharap.
Ang teksto ng dinisenyo na programa ay hindi ipinasok nang direkta mula sa keyboard hanggang sa input ng processor, ngunit nabuo sa buffer ng editor ng teksto. Ang E utos (I-edit - edit) ay nagtatakda ng mode ng pag-edit, kung saan ang mga salitang nai-type sa keyboard ay hindi na nakikita ng processor bilang mga utos na ipapatupad kaagad, ngunit nakasulat lamang sa buffer at sabay-sabay na ipinapakita sa teksto ng screen. Sa tulong ng mga espesyal na key na kumokontrol sa paggalaw ng kasalukuyang tagapagpahiwatig ng posisyon (cursor) sa screen, pati na rin ang pag-edit ng mga utos na ibinigay sa pamamagitan ng pagpindot sa iba pang mga key, ang ipinasok na teksto ay maaaring itama at mabago sa pamamagitan ng paggawa ng mga pagtanggal at pagsingit, paglipat ng mga fragment nito mula sa lugar sa lugar, atbp.
Sa pagtatapos ng pagpasok at pag-edit ng teksto, ang editor ay naka-off sa pamamagitan ng pagpindot sa E key nang sabay-sabay sa (mas tiyak, kasama ang naunang pinindot) na key
Kapag kumpleto na ang paglo-load, ang mga pamamaraan at data ay magagamit para sanggunian sa pamamagitan ng kanilang mga pangalan na nai-type mula sa keyboard, at posible na suriin ang kawastuhan ng programa sa pamamagitan ng pagsasagawa ng mga pamamaraan sa pataas na pagkakasunud-sunod, i.e. simula sa mga ang mga kahulugan ay hindi naglalaman ng mga hindi pa nasubok na pamamaraan. Bago mo simulan ang pagsuri, magandang ideya na tiyaking hindi gumagamit ang iyong program ng mga hindi natukoy na pangalan. Ipinapakita ng processor ang mga ito sa screen gamit ang UNDEF command. Upang madagdagan ang teksto ng programa sa mga kahulugan ng mga pangalang ito, pati na rin upang iwasto ang iba pang mga error na nakita sa proseso ng pag-verify, tawagan ang editor gamit ang E command at gawin ang naaangkop na pagbabago ng source text ng program na matatagpuan sa buffer ng editor, at pagkatapos ilipat ang processor sa pangunahing mode at i-load ang mga nilalaman ng buffer gamit ang utos ng PF.
Pagkatapos suriin at subukan ang programa, ang source code nito ay maaaring kopyahin mula sa buffer ng editor patungo sa disk gamit ang OE f command, kung saan f ang pangalan ng file kung saan isusulat ang program sa disk. Sa hinaharap, ang mga nilalaman ng file ay maaaring mai-load sa input ng processor na may utos na LOAD f, at makopya din sa buffer ng editor bilang karagdagan sa teksto sa loob nito na may utos na IE f. Bilang default, ang mga file ay may extension na .DSP. Maaaring i-pre-clear ang buffer gamit ang KE command. Posible ring i-print ang mga nilalaman ng buffer gamit ang utos ng LPE.
Pagkatapos mag-load ng isang program na handa na para sa pagpapatupad, posible na linisin ang $ subdictionary na nilikha para dito.<имя>command CLEAR $<имя>. Sa pamamagitan ng pagsasagawa ng utos na ito, inaalis ng processor ang mga hindi naayos na pangalan mula sa pinangalanang subdictionary, i.e. lahat ng mga pangalan maliban sa mga kung saan ang mga kahulugan ay pinangungunahan ng pag-aayos ng unlapi:: (dalawang tutuldok). Sa kasong ito, ang mga pangalan lamang mismo (mga entry sa diksyunaryo) ang tatanggalin, habang ang mga katawan ng mga pamamaraan at data na nauugnay sa mga ito ay pinapanatili at magagamit sa panahon ng pagpapatupad ng programa sa pamamagitan ng mga panloob na sanggunian na itinatag sa panahon ng pagsasama-sama, gayunpaman, hindi na sila maa-access mula sa labas. Upang maibalik ang posibilidad ng pag-access mula sa labas, halimbawa, kung kailangan mong mag-compile ng ilang karagdagan o pagbabago, kailangan mong i-reload ang source code ng programa.
Ang mga pangalan ay maaaring gawing hindi naa-access mula sa labas, nang hindi inaalis ang mga ito mula sa diksyunaryo, gamit ang SHUT $ command<имя>, na nagsasara ng access sa lahat ng salita ng subdictionary na pinangalanan dito. Ang pagbubukas ng subdictionary para gamitin ang mga salita nito ay ginagawa gamit ang USE $ command<имя>. Mayroon ding ONLY $ command<имя>, na nagsasara ng lahat ng subdictionary maliban sa pinangalanang isa, at ang CANCEL command, na nagkansela ng paghihigpit na ito. Ang mga utos sa itaas ay nagpapahintulot sa iyo na kontrolin ang paggamit ng diksyunaryo sa oras at limitasyon ng pag-compile kinakailangang minimum hanay ng mga pangalan na magagamit ng gumagamit ng programa.
Ang paghahanap para sa isang pangalan sa diksyunaryo ay ginagawa sa pamamagitan ng pagtingin sa mga salita nito sa reverse order kung saan ang mga ito ay ipinasok sa diksyunaryo, i.e. simula sa huling entry. Samakatuwid, para sa isang pangalan na tinukoy nang higit sa isang beses sa diksyunaryo, ang pinakabagong kahulugan ay wasto. Kung ang subdictionary na naglalaman ng huling kahulugan na ito ay sarado, pagkatapos ay ang paghahanap ay magpapatuloy sa unang magagamit na entry sa diksyunaryo na may ibinigay na pangalan, at ang kahulugan na tinukoy ng entry na iyon ay gagamitin.
Ilang salita tungkol sa input at output ng data. Tulad ng nabanggit na, sinusubukan ng processor na bigyang-kahulugan ang salita ng naisakatuparan na programa na hindi matatagpuan sa diksyunaryo bilang isang numero at, kung matagumpay, itulak ang binary na katumbas ng numerong ito sa stack. Ang paglalagay ng numero sa stack ay maaaring gawin gamit ang TIN command, na nangangailangan ng pag-type ng input number sa keyboard. Mayroon ding mga utos na nagiging sanhi ng isang character na ipinasok mula sa keyboard upang itulak papunta sa stack: TIB - may display, TRB - nang hindi ipinapakita ang character na ito sa screen. Sa kasong ito, ang code ng character ay kinakatawan ng mababang byte ng isang 32-bit na salita na ipinadala sa stack, ang senior na 3 byte nito ay katumbas ng zero.
Ang pagpasok ng mga nilalaman ng tuktok ng stack, ayon sa pagkakabanggit, ay posible sa anyo ng isang numero at sa anyo ng isang titik. Ang TON command ay nagiging sanhi ng numerical value ng subnode na maipakita sa screen sa output field, ang lapad nito ay tinukoy ng vertex, sa number representation system na itinatag sa oras ng pagpapatupad nito. Ang TOB command ay nagpapakita ng character na ang code ay nakapaloob sa mababang byte ng tuktok ng stack. Sa parehong mga kaso, ang output ay sinusundan ng pag-alis ng mga argumento mula sa stack.
Ang DSSP processor ay may apparatus para sa panlabas at panloob (utos) na mga interrupts at nagbibigay ang sumusunod ay nangangahulugan kanilang pagproseso. Ang pamamaraan na nilayon upang mahawakan ang isang panlabas na interrupt ay tinukoy sa parehong paraan tulad ng isang normal na pamamaraan, ngunit may prefix na INT na idinagdag bago ang colon. Ang pangalan ng naturang pamamaraan ay nauugnay sa address ng interrupt vector na may utos:
<адрес вектора>LINK<имя процедуры>
Ang isang command interrupt ay isang pinangalanang operasyon upang tumawag ng isang pamamaraan ng pagtugon. Ang pangalan ng operasyong ito ay tinutukoy ng TRAP command, na iniuugnay dito ang tinatawag na final response procedure, na ginagawa kung ang huling reaksyon ay hindi papalitan ng isa pang response procedure gamit ang ON o EON command. Ang lahat ng tatlong utos ay may parehong format:
BITAG<имя вызова> <процедура реагирования>
NAKA-ON<имя вызова> <процедура реагирования>
eon<имя вызова> <процедура реагирования>
Ang isang pamamaraan na nakamapa sa isang pangalan ng tawag sa pamamagitan ng isang pagtuturo ng EON ay isinasagawa pagkatapos na lumabas sa katawan ng pamamaraan na naglalaman ng pagtuturo ng EON at kasama ang halaga ng operand stack pointer na nasa lugar sa oras na ang EON ay naisakatuparan.
PARA syntax ng wika
Kasama sa alpabeto ng wikang PARADISE ang Latin at Russian, maliliit at malalaking titik, decimal na digit, matematika at iba pang espesyal na character. Ang mga elemento (miyembro) ng alpabeto ay tinatawag na mga titik. Ang panlabas na representasyon ng isang liham ay ang naka-print na imahe nito (naka-print na karakter). Sa loob ng PRSP processor, ang bawat naka-print na character ay kinakatawan ng isang byte na ang halaga ay ang binary code ng character na iyon. Ang pagbabago ng panlabas na representasyon sa panloob at kabaligtaran ay isinasagawa ng input / output device (keyboard, display, printer). Para sa kaginhawahan, ang numerical na halaga ng code ay ipinahayag sa decimal, hexadecimal o octal system, na tinatawag ang kaukulang numero ng decimal, hexadecimal o octal na character code.
Ang lahat ng mga bagay ng wikang PARADISE ay binuo mula sa mga titik at mga linear na chain ng mga titik na may hangganan ang haba, na tinatawag na mga salita. Ang delimiter para sa magkakasunod na salita ay isang hindi napi-print na karakter (espasyo). Ang isang string ng mga puwang ay katumbas ng isang solong espasyo. Bilang karagdagan, ang pag-andar ng salitang separator ay isinasagawa ng command na "Pumunta sa simula ng susunod na linya", na ipinahiwatig sa mga keyboard ng mga input device ng simbolo
Mga halimbawang salita: CLEAR NOP STEK2 & 1+ -366 X Probe.
Ang PRSP processor ay nakikilala ang mga salita sa pamamagitan ng unang pitong titik, na kinikilala ang mga ito sa pamamagitan ng polyterminal na paghahambing sa mga salita sa diksyunaryo nito. Ang diksyunaryo ay naglalaman ng mga salita na ang mga pangalan (designation) ng sariling mga operasyon ng processor, na tinatawag na mga pangunahing operasyon o primitives, at maaaring mapunan ng mga pangalan ng mga bagay (data, mga pamamaraan) na tinukoy ng gumagamit. Kaya, ang mga salitang nakapaloob sa diksyunaryo ay alinman sa mga pangalan ng mga aksyon (operasyon, pamamaraan) o ang mga pangalan ng data (constants, variables, arrays).
Kapag ang isang nakikilalang salita ay wala sa diksyunaryo, sinusubukan ng processor na italaga ito sa isa sa mga sumusunod na kaso:
numeric literal, i.e. isang sequence ng mga digit, posibleng nagsisimula sa isang minus sign, halimbawa: 0, 4096, -25;
literal na literal: isang salita na nagsisimula sa karakter na #, na nagiging sanhi upang matanggap ng processor bilang isang ibinigay na code ang karakter kaagad na sumusunod dito, halimbawa: #A - literal ng malaking Latin na titik A, #5 - literal ng numero 5 , # - literal na espasyo, ## - literal na mga titik #;
literal na teksto: arbitrary na text na nakapaloob sa dobleng panipi at pinaghihiwalay ng mga salitang naghihiwalay, halimbawa: "Text", "Input file N3";
command para sa pag-isyu ng text message sa display: ang text ng output message, na nililimitahan sa kaliwa ng dot-double quote na kumbinasyon ng character at double quote sa kanan at pinaghihiwalay ng mga word separator, halimbawa: "Walang laman ang stack";
komento: arbitrary na text na nakapaloob sa mga square bracket at pinaghihiwalay ng mga delimiter, halimbawa: .
Ang mga literal at ang utos para sa pag-isyu ng isang mensahe sa display ay kumikilos bilang mga bagay ng PRSP na wika kasama ang mga salitang kinikilala mula sa diksyunaryo, habang ang mga komento ay ganap na hindi pinansin ng PRSP processor - ang mga ito ay inilaan para sa isang tao, hindi para sa isang makina. Kung ang salita ay hindi matatagpuan sa diksyunaryo at hindi nauugnay sa mga nakalistang construct, ang processor ay naglalabas ng mensahe: "Hindi ko alam<неопознанное слово>".
Sa view ng espesyal na kahulugan na ibinigay sa mga titik #, "at kumbinasyon." sa simula ng isang salita, i.e. pagkatapos ng separator, pati na rin ang titik " bago ang separator, hindi dapat gamitin ang mga ito sa mga tinukoy na posisyon sa mga salitang tinukoy para sa pagsasama sa diksyunaryo.
Ang pagkakasunud-sunod ng mga salita sa input ng processor ay binibigyang-kahulugan bilang isang pagkakasunod-sunod ng mga tagubilin na isinagawa ng processor. May tatlong uri ng salita:
1) gumanap nang nakapag-iisa, i.e. kumakatawan sa isang salita na utos (monowords);
2) isinagawa kasabay ng isa o higit pang mga kasunod na salita, i.e. pagiging paunang salita(mga prefix) dalawang-, tatlo- o maraming salita na utos;
3) nauuna sa utos bilang isang paglilinaw o indikasyon ng isang espesyal na mode ng pagpapatupad (mga prefix).
Kasama sa mga monoword ang mga literal, pangalan ng data, karamihan sa I/O, pagsubok, at pagpapatakbo ng conversion ng data sa stack, at mga pamamaraang tinukoy ng user. Halimbawa: 1987 - numeric literal, #5 - literal ng digit 5, "Listahan ng mga scheme" - text literal, LENGTH - variable na pangalan, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.
Ang mga prefix ay likas sa mga utos para sa paglalarawan ng data at pagtukoy ng mga pamamaraan, pati na rin para sa pagmamanipula ng pinangalanang data, kondisyon at maramihang pagpapatupad ng mga pamamaraan, at pamamahala ng diksyunaryo. Mga halimbawa ng mga utos na may mga prefix:
VAR SUM - lumikha ng variable na SUM,
: ODD [x] 1 & ; - lumikha ng isang ODD na pamamaraan na pumapalit sa isang kakaibang numero ng 1, isang even na numero na may 0,
0 X - italaga ang halaga 0 sa variable X,
BR+ P1 P2 - kung ang halaga ng tuktok na kinuha mula sa stack ay positibo, pagkatapos ay isagawa ang P1, kung hindi, isagawa ang P2,
RP CHECK - isagawa ang pamamaraan ng CHECK nang paulit-ulit,
USE $REAL - buksan ang $REAL subdictionary para magamit.
Bilang isang tuntunin, ang isang partikular na prefix ay nangangailangan ng isang tiyak na bilang ng mga salita pagkatapos nito. Kaya, sa mga halimbawang ibinigay, ang VAR, !0, at USE prefix ay nangangailangan ng isang salita bawat isa, habang ang BR+ prefix ay nangangailangan ng dalawang salita. Gayunpaman, ang prefix: (colon) ay nagbibigay-daan sa iyo na bumuo ng isang utos ng arbitrary na haba, na nagsisimula sa tatlong salita. Ang dulo ng utos ay isang salita; (tuldok-kuwit). Ang di-makatwirang haba ay katangian din ng command-descriptor ng mga constants CNST A1 ... AJ ; at ang procedure multiple selection command BR A1 P1 ... AJ PJ ELSE PN.
Ang mga prefix ay mga espesyal na salita na, kapag idinagdag sa harap ng isang command, binabago ang nilalaman nito o tumukoy ng isang espesyal na paraan ng pagpapatupad. Halimbawa, ang VAR X na utos na walang prefix ay isang tagubilin upang lumikha ng 16-bit na variable X. Kung isasama natin ang BYTE prefix dito, makukuha natin ang BYTE VAR X na command, na nagtuturo sa paglikha ng 8-bit variable (byte) na may pangalang X. Kung gagamitin natin ang LONG prefix, makakakuha tayo ng LONG VAR X - isang tagubilin para gumawa ng 32-bit na variable na pinangalanang X.
Ang prefix ng isa pang uri, katulad ng:: (dalawang tutuldok) ay nagsasabi sa resulta ng pagpapatupad ng utos ng katatagan patungkol sa CLEAR na pamamaraan, na nag-aalis ng mga maluwag na salita mula sa diksyunaryo. Ang mga pangalan na ipinasok sa diksyunaryo sa panahon ng pagtatayo ng programa sa pamamagitan ng paglalarawan ng data at mga utos ng kahulugan ng pamamaraan, pagkatapos na malikha at masuri ang programa, ay maaaring alisin mula sa diksyunaryo, maliban sa ilang kinakailangan upang mapanatili ang natapos na programa. Ginagawa ang pagtanggal gamit ang CLEAR $ command<имя подсловаря>, na nagtuturo na i-clear ang subdictionary na nauugnay sa programa, i-save lamang ang mga salitang iyon sa mga kahulugan na naglalaman ng prefix::. Mga halimbawa ng mga utos na bumubuo ng mga hindi naaalis na salita:
:: BYTE CNST LITCODE # #0 #A ;
:: : MOD / [target(a,b),rest(a,b)] E2 D [rest(a,b)] ;
Tulad ng ipinapakita ng pangalawang halimbawa na naglalaman ng :: at BYTE prefix, maaaring mayroong higit sa isang prefix sa isang command.
Kaya, ang isang utos sa DSSP ay maaaring maging isang salita (monoword) o isang parirala (parirala) na nagsisimula sa isang prefix at naglalaman ng bilang ng mga salita na itinakda para sa prefix na ito, at kung ang prefix ay nagbibigay-daan sa isang arbitrary na bilang ng mga salita, kung gayon ito ay may salitang delimiter sa dulo, o maaaring ito ay isang pariralang may prefix na espesyal na salita.
Ang pangunahing wika ng DSSP ay hindi naglalaman ng mas kumplikadong syntactic constructions kaysa sa command at hindi naglalaman ng anumang constructions maliban sa mga tinalakay sa itaas. Kahit na ang mga kailangang-kailangan na bagay sa mga programming language bilang isang expression at isang function ay wala sa base na wika at maaaring ipakilala, kung kinakailangan, sa kurso ng pag-unlad nito.
Ang isang base na programa sa wika ay isang koleksyon lamang ng mga utos na naisakatuparan sa pagkakasunud-sunod kung saan lumilitaw ang mga ito sa teksto. Bukod dito, ang bawat utos, maliban sa mga naglalaman lamang ng mga primitive, sa proseso ng pagpapatupad nito ay nagsasangkot ng isang pagkakasunud-sunod ng mga utos na tumutukoy sa mga salitang kasama dito. Ang mga kasangkot na utos naman ay maaaring maglaman ng mga salita na nagsasaad ng mga tanikala ng mga utos, na maaaring naglalaman din ng mga salitang tumutukoy sa kanilang nauugnay na mga kadena, at iba pa. hanggang sa antas kung saan ang mga utos ay naglalaman lamang ng mga primitive.
Ang pangkalahatang paglalarawan ng wikang PARA, na bumubuo sa nilalaman ng kabanatang ito, ay nakatuon sa paglalarawan ng istruktura ng wikang ito at ang pangunahing (paunang) hanay ng mga utos nito, na isang hanay ng mga built-in na utos (primitives) ng PRSP processor. Ang karagdagang pag-unlad ng wika at isang kaukulang pagtaas sa mga kakayahan ng processor ay isinasagawa sa pamamagitan ng pagpapakilala ng mga bagong pamamaraan, utos, format at uri ng data, na binuo gamit ang mga pangunahing tool. Bilang isang patakaran, ang naturang pag-unlad ay likas na nakatuon sa problema at isinasagawa sa anyo ng mga pakete ng mga pamamaraan na na-load sa input ng processor bilang karagdagan sa base system.
Sa kabilang banda, ang pangunahing sistema ay maaaring dagdagan ng mga espesyal na tool na ipinatupad sa batayan nito upang mapataas ang kahusayan ng makina ng mga programa ng DSSP. Kasama sa mga tool na ito ang kakayahang direktang tukuyin ang mga indibidwal na pamamaraan sa command code ng machine na ginagamit. Ang paraan ng pagtukoy sa isang pamamaraan ay walang epekto sa karagdagang paggamit nito: ang mga pangalan ng lahat ng mga pamamaraan ay inilalagay sa isang karaniwang diksyunaryo at ganap na pantay. Binibigyang-daan ka ng isang bilang ng mga programa sa aklatan na gumamit ng mga pamamaraan o buong programang nakasulat sa ibang mga wika.
Paglalarawan ng mga pagpapatakbo at utos
Mga operasyong isinagawa sa stack
Ang operand stack ay isa sa mga pangunahing elemento ng arkitektura ng PRSP processor. Karamihan sa mga tagubilin sa processor ay gumagamit ng stack, ginagamit ang mga operand na kailangan nila mula dito at ipinapadala ang mga resulta dito. Ang interpretasyon ng data sa stack ay nakasalalay sa kakanyahan ng problema na nalutas, ibig sabihin, sa huli, ito ay responsibilidad ng programmer. Dahil sa katotohanan na ang halaga na nakuha sa stack ay talagang nawawala ang pangalan nito, mahirap matukoy mula sa teksto ng programa kung aling mga operand ito o ang operasyong iyon ay inilapat, ano ang mga resulta nito. Samakatuwid, upang tahasang ipahiwatig ang mga operand at resulta ng mga pamamaraan sa wikang PARA, ginagamit ang mga komento. Sa kasong ito, hindi kinakailangan (at hindi palaging posible) na ilarawan ang buong nilalaman ng stack. Ang pagkomento sa itaas na bahagi ng stack, na apektado ng pamamaraang isinagawa dito, ay ganap na kinakailangan, dahil kung wala ito ang visibility ng programa ay nawala, at ang pagpapatunay nito ay mahirap.
Upang makamit ang pagkakapareho ng programa, ang mga komentong ito ay dapat na isulat na may ilang simpleng panuntunan sa isip. Tulad ng anumang komento, ang paglalarawan ng data sa stack ay nakapaloob sa mga square bracket. Ang paglalarawang ito ay isang listahan ng mga operand na nasa stack sa isang partikular na punto sa programa. Ang bawat elemento ng listahan ay nagpapakilala sa mga nilalaman ng isang posisyon ng stack, isang kuwit ang ginagamit bilang isang separator. Ang mga halaga ng posisyon ng stack ay nakalista mula kaliwa hanggang kanan, na nagsisimula sa pinakamalalim na elemento at nagtatapos sa tuktok ng stack. Ang paglalarawan ng isang operand ay maaaring isang numero, isang pangalan, isang expression, o anumang iba pang makabuluhang notasyon na nagpapaliwanag ng kahulugan ng halaga sa stack. Minsan maaari mong tukuyin ang ilang posibleng mga halaga para sa isang tiyak na posisyon ng stack. Sa kasong ito, ang mga halaga ay nakalista na pinaghihiwalay ng isang slash.
Narito ang isang halimbawa ng isang komento na sumasalamin sa estado ng operand stack:
[simulan ang dr,N+1,1/0]
Sa punto sa programa kung saan matatagpuan ang komentong ito, ang operand stack ay dapat maglaman ng hindi bababa sa tatlong posisyon, at sa itaas ay maaaring 1 o 0, sa ibaba - isang numerical na halaga na katumbas ng N + 1, at sa ibaba nito - ilang numero na binibigyang kahulugan bilang panimulang address.
Para sa kaginhawaan ng pagtukoy ng kinakailangang posisyon ng stack, gagamitin namin ang konsepto ng lalim ng pangyayari. Ipagpalagay namin na ang tuktok ng stack ay nasa depth 1, ang ibaba ay nasa depth 2, at iba pa. Sa partikular, ang value na tinukoy sa halimbawa bilang "start.adr." nakahiga sa lalim 3.
Sisimulan namin ang aming pag-aaral ng pangunahing wika ng PRSP na may mga tagubilin para sa pagtulak ng mga halaga sa stack. Ang pinakasimpleng (at pinakakaraniwang ginagamit) na utos ng ganitong uri ay isang literal na numero, iyon ay, isang tahasang indikasyon ng isang pare-pareho na itutulak sa stack. Hayaan, halimbawa, gusto naming itulak ang mga numero 28, -5 at 11 sa stack. Upang gawin ito, ipasok ang linya mula sa keyboard:
28 -5 11 at pindutin ang key
Upang maipakita ang buong nilalaman ng stack sa screen, ang DSSP ay may command .. (dalawang tuldok). Pagkatapos isagawa ito, nakukuha namin ang sumusunod na linya sa screen:
Gaya ng nakikita mo, ang anyo ng printout ay sumusunod sa mga tinatanggap na convention para sa pagkomento sa estado ng stack (maliban na ang isang puwang ay ginagamit sa halip na isang kuwit). Hindi binabago ng .. command ang mga nilalaman ng stack.
Ang isang 32-bit na salita (4 bytes) ay ginagamit upang kumatawan sa isang stack na posisyon sa memorya ng makina, ang mga numero ay kinakatawan sa dalawa na pandagdag. Alinsunod dito, ang PRSP processor ay maaaring tama na makaramdam lamang ng mga integer mula -2147483648 hanggang 2147483647. Kung ang ipinasok na numero ay hindi kinakatawan sa 32 bits (isinasaalang-alang ang sign), pagkatapos ay ang pinaka makabuluhang mga bit na hindi magkasya ay itatapon.
Sa isinasaalang-alang na mga halimbawa, ipinapalagay na ang PRSP processor ay nasa mode ng decimal input/output ng mga numero. Para itakda ang mode na ito sa PARADISE language mayroong command B10.
Sa maraming mga gawain, kinakailangang bigyang-kahulugan ang naprosesong data hindi bilang mga numero, ngunit bilang mga binary code, iyon ay, 32-component bit vectors. Sa DSSP, posibleng gumana sa mga code na ipinakita sa binary, octal o hexadecimal na mga sistema ng numero. Upang itakda ang nais na mode, sapat na upang maisagawa ang isa sa tatlong mga utos: B2, B8 o B16, pagkatapos nito ay tatanggapin at i-print ng processor ang lahat ng ipinasok na mga code sa tinukoy na sistema ng numero.
Maaaring gamitin ang feature na ito upang i-convert ang mga decimal na numero sa mga base 2, 8, at 16. Halimbawa, upang i-convert ang numero 29, ilagay at isagawa ang sumusunod na linya:
B10 29 B2 . B8. B16. Bilang resulta, ang processor ay magpapakita ng isang serye ng mga numero sa screen: 00000000035 0000001D na mga representasyon ng decimal na numero 29 sa tatlong ipinahiwatig na mga sistema ng numero. Tandaan na ang mga code ay naka-print sa kanilang representasyon sa makina, ibig sabihin, may mga nangungunang zero at walang "+", "-" na mga palatandaan. Kapag nagpapatupad ng linya B10 -2 B8 . ibabalik ang numerong 37777777776, na siyang octal na representasyon ng -2's complement.
Kapag nagtatrabaho sa mga hexadecimal code, maaaring mangyari ang mga banggaan sa pagitan ng mga literal na numero at mga pangalan ng command ng processor ng PRSP. Halimbawa, ang salitang B8 sa hexadecimal I/O mode ay maaaring bigyang-kahulugan bilang isang command upang itakda ang octal mode at bilang isang hexadecimal constant. Upang maiwasan ang kalabuan, ang mga literal na numero ay dapat magsimula sa isang hindi makabuluhang zero, gaya ng 0B8.
Ang batayan ng command system ng DSSP processor ay ang data transformation operations na nasa stack. Ang pangkalahatang tuntunin na namamahala sa mga operasyong ito ay ang bawat operasyon ay kumonsumo (tinatanggal) ang mga operand na kailangan nito mula sa stack at itulak ang mga halaga ng resulta (kung mayroon man) sa kanilang lugar.
Isaalang-alang ang mga tagubilin ng processor na nagpapatupad ng apat na pagpapatakbo ng aritmetika: pagdaragdag, pagbabawas, pagpaparami, at paghahati ng mga integer. Para sa kanilang imahe sa wika ng PARADISE ang mga sumusunod na salita ay ginagamit: +, -, * at /, ayon sa pagkakabanggit. Upang makuha ang kabuuan ng dalawang numero sa stack, halimbawa 123 at 45, kailangan mong itulak ang mga numerong ito sa stack at isagawa ang + command. Upang gawin ito, ipasok lamang ang sumusunod na linya mula sa keyboard (ipagpalagay na ang decimal input / output mode ay nakatakda):
123 45 +
Kung ipinapakita namin ngayon ang mga nilalaman ng stack sa screen (gamit ang command ..), kung gayon ang resulta ng pagdaragdag ay makikita:
Ang commutative operation ng multiplication ay gumagana sa katulad na paraan.
Kapag nagsasagawa ng mga non-commutative na operasyon ng pagbabawas at paghahati, ang subtop ng stack ay kinukuha bilang minuend (dividend), at ang tuktok ay ginagamit bilang subtrahend (divisor). Halimbawa, upang kalkulahin ang pagkakaiba 151-68, kailangan mong isagawa ang linya:
151 68 -
Ang programa para sa pagsasagawa ng isang aritmetika na operasyon sa wikang PARA ay nailalarawan sa pamamagitan ng katotohanan na ang operasyon ay matatagpuan pagkatapos ng mga operand na naaayon dito. Ang nasabing notasyon ng mga arithmetic expression ay tinatawag na postfix (o Polish inverse) notation at malawakang ginagamit sa mga stack calculator. Hayaan, halimbawa, kailangan nating kalkulahin ang halaga ng expression ng arithmetic ((127+81)*15-(31+117)*21)*3
Sa postfix notation, ang expression na ito ay magiging ganito:
127 81 + 15 * 31 117 + 21 * - 3 *
Ang linyang ito (kung saan ang mga salita ay pinaghihiwalay sa bawat isa ng mga puwang) ay isang handa na programa para sa pagkalkula ng aming pagpapahayag ng PRSP processor.
Ang dibisyon / utos ay naiiba sa iba pang mga operasyon sa aritmetika dahil nagreresulta ito sa dalawang halaga - ang quotient at ang natitira. Ang quotient ay nasa ibaba ng stack, at ang natitira ay nasa itaas. Ang quotient ay negatibo kung ang dibidendo at divisor ay may iba't ibang mga palatandaan. Ang natitira ay palaging may tanda ng dibidendo. Narito ang ilang halimbawa ng paggamit ng division command.
125 7 / [-17,-6] / / /
Kapag nagsasagawa ng mga kalkulasyon, maaaring mangyari ang mga maling sitwasyon: overflow at paghahati ng zero. Ang processor ng DSSP ay hindi tumutugon sa kanila sa anumang paraan (sa partikular, kapag hinahati sa zero, ang mga nilalaman ng stack ay hindi nagbabago), at ang kontrol sa tamang paggamit ng mga operasyon ay itinalaga sa programmer.
Kapag nagprograma, kadalasang kinakailangan upang taasan o bawasan ang halaga ng isang halaga ng 1 at 2. Ang mga espesyal na command ay ipinakilala sa PARADISE na wika na nagsasagawa ng mga tinukoy na aksyon sa tuktok ng stack. Ang mga ito ay ipinahiwatig ng mga salita: 1+, 1-, 2+, 2-. Ang pagpapatupad ng mga utos na ito ay katumbas ng pagtulak ng nais na pare-pareho (1 o 2) sa stack, na sinusundan ng pagsasagawa ng kinakailangang operasyon ng aritmetika (+ o -). Halimbawa, ang 2+ ay katumbas ng salitang pares 2 + . Ang pagpapakilala sa wika ng mga utos na ito ay sanhi ng mga pagsasaalang-alang sa kahusayan.
Gayundin, upang mapabuti ang kahusayan, ang base na wika ng DSSPprocessor ay may mga command na T0 at T1, na pinapalitan ang halaga ng tuktok ng stack ng 0 at 1, ayon sa pagkakabanggit, anuman ang halaga sa itaas bago ang tinukoy na command. Mga halimbawa:
Ang mga command na NEG, ABS at SGN ay idinisenyo din para gumana sa numerical data. Binabaliktad ng pagtuturo ng NEG ang tanda ng tuktok ng stack, pinapalitan ng ABS ang halaga ng tuktok ng stack ng ganap na halaga nito, SGN - kumukonsumo ng numeric na halaga mula sa tuktok ng stack at inilalagay ang sign ng nakuhang numero sa lugar: -1 - kung negatibo ang numero, 1 - kung positibo, 0 - kung katumbas ng zero. Halimbawa:
5 NEG [-5] ABS SGN
Ang MIN at MAX na mga utos sa base na wika ay nagbibigay-daan sa iyong mahanap ang minimum at maximum ng dalawang integer. Ang mga operand para sa mga tagubiling ito ay dalawang numero sa itaas at ibaba ng stack. Ang pagtuturo ng MIN ay nag-iiwan ng pinakamababang bilang ng mga parameter sa stack, MAX ang maximum ng mga ito. Halimbawa:
5 0 15 MIN [-5.0] MAX
Upang mahanap ang minimum (maximum) ng tatlong numero sa stack, sapat na upang ilapat ang MIN (MAX) command nang dalawang beses:
MIN MIN [-2]
Ang tagubilin ng SEG upang suriin kung ang numerong nasa tuktok ng stack ay nasa loob ng tinukoy na hanay mula a hanggang b (kabilang ang mga hangganan) ay nag-iiwan ng sumusunod na bandila sa stack bilang resulta: 1 kung ang numero ay nasa hanay, at 0 kung hindi:
SEG [sign] halimbawa:
Bilang karagdagan sa mga tagubilin para sa pagtatrabaho sa numerical data, ang hanay ng mga tagubilin para sa DSSP processor ay may kasamang bilang ng mga operasyon na idinisenyo upang i-convert ang 32-bit na mga code. Tinatrato ng mga operasyong ito ang stack element bilang isang 32-component vector ng mga bit, ang mga bahagi nito ay binibilang mula kanan hanggang kaliwa sa paraang ang pinakakaliwang bit ay numero 31 at ang pinakakanang numero ay 0. Ang pababang pagnunumero ng mga bahagi ay umuulit. ang pag-numero ng machine word bits na pinagtibay para sa maraming microprocessors.
Pangunahing kasama sa mga tagubilin ng bit-vector ang mga pagpapatakbong bitwise ng Boolean algebra:
bitwise inversion ng tuktok ng INV stack, binabago ang halaga ng bawat bit ng tuktok, ibig sabihin, pinapalitan ang 0 ng 1 at 1 ng 0;
bitwise conjunction ng tuktok at ibaba ng stack &, itinatakda ang i-th bit ng resulta, i=31,30,...,0, hanggang 1 kung ang i-th bits ng parehong operand ay 1, at kung hindi man pagtatakda ng i-th bit na katumbas ng 0;
bitwise disjunction ng tuktok at ibaba ng stack &0, itinatakda ang i-th bit ng resulta, i=31,30,...,0, sa 0 kung ang i-th bits ng parehong operand ay 0, at kung hindi man pagtatakda ng i-th bit na katumbas ng 1;
bitwise na karagdagan (non-equivalence) "+" ng itaas at ibaba, ang pagtatakda ng i-th bit ng resulta sa 0 kung ang i-th bits ng parehong operand ay may parehong mga halaga, at ang pagtatakda ng i-th bit ng magreresulta sa 1 kung ang mga halaga ng i-th bits ng mga operand ay iba.
525 INV 722 & 136 &0 325 "+"
Ang bitwise conjunction ay kadalasang ginagamit upang i-reset (clear) ang mga piraso ng isang salita. Upang gawin ito, ang orihinal na salita ay pinagsama sa isang mask na naglalaman ng mga zero sa mga pirasong iyon na kailangang i-clear at mga sa natitirang mga piraso. Halimbawa, kung kailangan mong i-reset ang mga bits 3 hanggang 5 sa ilang salita X, kailangan mong gawin ang bitwise na kaugnay nito sa mask na 37777777707. Para sa X=235 makuha namin ang:
Maaaring gamitin ang bitwise disjunction para ipasok ang gustong kumbinasyon ng mga bit sa isang dating na-clear na grupo ng mga word bit. Hayaan, halimbawa, kailangan mong ilagay ang binary combination 010 sa bits 3 hanggang 5 ng salitang natitira sa stack bilang resulta ng huling halimbawa. Ito ay maaaring gawin tulad nito:
Kasama rin sa mga operasyon ng pagmamanipula ng bit ang mga tagubilin sa lohikal na paglilipat:
left shift SHL - bawat bit ng tuktok ng stack, simula sa ika-31, ay tumatagal ng halaga ng isa na sumusunod dito sa pababang pagkakasunud-sunod ng mga numero, at ang huli, zero bit ay tumatagal ng halaga na 0;
right shift SHR - bawat bit ng tuktok ng stack, simula sa 0, kinukuha ang halaga ng susunod sa pataas na pagkakasunud-sunod ng mga numero, at ang 31st bit ay kumukuha ng value na 0;
top shift SHT - ang tuktok na elemento ay tinanggal mula sa stack at itinuturing bilang isang integer N, na nagpapahiwatig kung gaano karaming mga shift at sa kung anong direksyon ang dapat gawin sa tuktok ng stack: kapag N>0, isang kaliwang shift ay ginanap, kapag N<0 - вправо.
B8 125 SHR SHL -2 SHT
Maaaring gamitin ang mga pagpapatakbo ng left shift upang i-multiply ang mga numero sa pamamagitan ng 2 sa kapangyarihan ng N, kung saan ang N ay isang natural na numero na tumutukoy sa bilang ng mga shift. Halimbawa, ang pagpaparami ng numero -5 sa 8 ay maaaring gawin sa pamamagitan ng paglilipat ng numerong ito ng 3 digit sa kaliwa:
B10 -5 3 SHT [-40]
Sa kasong ito, dapat isaalang-alang ang posibilidad ng overflow.
Ang right shift ay maaaring gamitin bilang integer division operation ng 2 hanggang sa kapangyarihan ng N para lamang sa mga positibong numero, dahil ang pinaka makabuluhang (sign) bit ay nakatakda sa zero sa mga tamang shift. Halimbawa:
samantalang
I-rotate ang tuktok ng stack ng 1 bit sa kanan ROR at kaliwang ROL ay katulad ng logical shift na mga tagubilin, maliban na ang gilid bit na itinulak palabas ay hindi nawawala, ngunit itinulak sa bakanteng espasyo mula sa kabilang dulo ng 32 -medyo mahabang salita. Halimbawa (mga numerong hexadecimal):
Ang mga utos ng processor ng DSSP na SWB at SWW ay inilaan din para sa pagproseso ng mga binary code. Ang SWB function ay upang palitan ang mga byte ng mas mababang kalahati ng tuktok ng stack, at ang SWW function ay upang palitan ang mga kalahati ng tuktok ng stack. Ilarawan natin kung paano gumagana ang mga command na ito gamit ang hexadecimal I/O mode (sa mode na ito, ang bawat byte ay kinakatawan ng dalawang hexadecimal digit):
B16 0ABCD SWB SWB
0ABCDEF12 SWW SWB
Ang mga stack manipulation command ay may mahalagang papel sa wikang PARA. Hindi nila binabago ang mga halaga ng data sa stack, ngunit binabago lamang ang kanilang lokasyon, na ginagawang mas madaling ma-access ang mga operand na malalim sa stack.
Mayroong tatlong mga utos para sa pag-alis ng mga elemento ng stack: D, DD, DS (Drop - itapon). Ang D command ay nag-aalis ng isang (nangungunang) elemento mula sa stack, DD - dalawang elemento, halimbawa:
D DD D DS ay nag-aalis ng lahat ng elemento mula sa stack (kinililinis ang stack):
Ang utos na kopyahin ang tuktok ng stack C (Kopyahin) ay nagtutulak ng kopya ng kasalukuyang halaga ng tuktok nito papunta sa stack. Katumbas ito ng pagdoble sa tuktok na elemento ng stack: ang lumang vertex ay nagiging subvertex, at ang kopya nito ay nagiging bagong vertex. Halimbawa:
Ipapakita namin ang aplikasyon ng command na ito gamit ang halimbawa ng pagkalkula ng polynomial p(x)=3*x**2+4*x-5 ayon sa scheme ni Horner: p(x)=(3*x+4)* x-5. Ipinapalagay namin na ang halaga x ay nasa tuktok ng stack.
[x] C 3 * 4 + * 5 -
Kasama ng command na kopyahin ang tuktok ng stack sa PARADISE na wika, mayroon ding mga command na C2, C3, C4, na kinokopya ang mga elemento na matatagpuan sa lalim ng 2, 3, 4. Ang kanilang operasyon ay maaaring ipaliwanag sa pamamagitan ng mga sumusunod na halimbawa:
C2 C4
Mayroon ding CT command para kopyahin ang isang elemento sa lalim na tinukoy sa tuktok ng stack. Kapag nagsasagawa ng CT, inaalis ng processor ang tuktok na elemento mula sa stack, ginagamit ang halaga nito bilang tagapagpahiwatig ng lalim ng kinopyang elemento, at itinutulak ang isang kopya ng huling elemento sa stack. Kaya, ang pagkopya ng isang elemento na matatagpuan sa lalim ng 5 ay tinukoy ng isang pares ng 5 CT na mga tagubilin, kung saan isinasagawa, ang processor ay itulak ang numero 5 papunta sa stack, at pagkatapos ay isakatuparan ang CT na pagtuturo. Ang pagpapatupad ng CT na may mga parameter na 1, 2, 3, 4 ay katumbas ng mga utos na C, C2, C3, C4 ayon sa pagkakabanggit.
Ang exchange command na E2, E3, E4 (Exchange - exchange) ay nagpapa-permute sa unang (itaas) na elemento ng stack, ayon sa pagkakabanggit, kasama ang ika-2, ika-3, ika-4, ibig sabihin, na may elementong matatagpuan sa lalim na 2, 3, 4. Halimbawa:
E3 E2
Upang makipagpalitan sa mas malalim, ang pagtuturo ng ET ay ginagamit, na, tulad ng CT, ay gumagamit ng halaga ng tuktok ng stack bilang isang tagapagpahiwatig ng lalim ng elemento na ipinagpapalit sa unang elemento. Halimbawa:
5ET
Ang Command ET na may mga parameter 2, 3, 4 ay katumbas ng mga command na E2, E3, E4.
Upang ilarawan ang paggamit ng kopya at exchange command, isaalang-alang ang isang problema sa pagsasanay. May tatlong numero sa stack. Kinakailangan upang makapasok sa stack: . Maaari naming imungkahi ang sumusunod na programa, ang kahulugan nito ay malinaw mula sa mga komento.
C3 C3 C3+
E4+E4
Ipinapakita ng halimbawang ito kung gaano kahusay ang papel ng mga komento, na sumasalamin sa estado ng operand stack.
Ang mga programa ay madalas na kailangang ihambing ang mga numerong halaga sa bawat isa at magsagawa ng iba't ibang mga pamamaraan depende sa mga resulta ng paghahambing. Ang wikang RAYA ay may mga utos ng paghahambing<, =, >. Ang mga ito ay tinukoy sa mga numero at gumagawa ng mga numerical na halaga 0 at 1 bilang isang resulta. Kaya, ang command< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >nagpapadala ng 1 kapag ang ilalim na elemento ay mas malaki kaysa sa itaas na elemento. Upang magprograma ng mga hindi mahigpit na paghahambing (mas mababa sa o katumbas ng, mas malaki kaysa sa o katumbas ng), ang NOT command ay ginagamit, na pumapalit sa halaga ng tuktok ng stack na hindi katumbas ng zero na may zero, at katumbas ng zero ng isa. Halimbawa, ang pagsusuri ng lohikal na expression na x>=5, kung saan ang x ay ilang numero sa tuktok ng stack, ay maaaring tukuyin tulad ng sumusunod:
[x]5< NOT
Ang karagdagang pagpapalawak ng mga posibilidad ng mga kundisyon ng programming ay ibinibigay sa pamamagitan ng paggamit, kasama ang mga utos ng paghahambing, ng mga lohikal na operasyon ng conjunction & (logical AND) at disjunction &0 (logical OR). Hayaan, halimbawa, kinakailangang makakuha ng 1 sa stack kung ang numero x sa vertex ay kabilang sa kalahating-segment na C 5< NOT C2 10 <
& E2 2 = &0
Ang mga tool sa pamamahala ng programa depende sa mga resulta ng paghahambing ay tatalakayin sa ibang pagkakataon.
Kahulugan ng mga pamamaraan
Bilang isang pangunahing pamamaraan ng programming, ang PRSP ay nagbibigay sa gumagamit ng kakayahang tukuyin ang pinangalanang mga pagkakasunud-sunod ng mga operasyon na tinatawag na mga pamamaraan. Hayaang kailanganin, halimbawa, upang kalkulahin ang mga halaga ng square trinomial 3*x**2-4*x+9 para sa mga ibinigay na x value. Sa kasong ito, dapat mong tukuyin ang isang pamamaraan na nagpapatupad ng trinomial na formula at ilalabas ang resulta sa terminal, at pagkatapos ay ilapat ang pamamaraang ito sa mga partikular na x value. Ang nais na pamamaraan, tawagin natin itong PX, ay tinukoy bilang mga sumusunod: : PX [x] C 3 * 4 - * 9 + . D; Ang ibig sabihin ng colon ay ang "define procedure" na operasyon, na ang pangalan ng procedure ay sumusunod sa colon pagkatapos ng isang naghihiwalay na espasyo. Ang pagtukoy sa pagkakasunud-sunod ng mga utos (katawan ng pamamaraan) ay sumusunod sa pangalan ng pamamaraan at nagtatapos sa isang semicolon. Sa madaling salita, ang pamamaraan ay tinukoy sa anyo:
: <имя процедуры> <тело процедуры> ;
Sa wikang PARADISE, kinakailangang magkomento sa estado ng operand stack sa simula at sa dulo ng procedure. Sa katawan ng pamamaraan, ang mga komento ay inilalagay sa pagpapasya ng programmer sa mga lugar na mahirap maunawaan.
Tinutulungan ng mga komento ang tao na maunawaan at gamitin ang pamamaraan, habang binabalewala lang ng processor ang lahat ng nasa panaklong. Samakatuwid, kapag ipinasok ang kahulugan ng isang solong pamamaraan mula sa terminal, maaaring tanggalin ang mga komento.
Matapos maipasok ang kahulugan ng pamamaraan at sa pamamagitan ng pagpindot sa key
*2PX
*3PX
*4PX
Tukuyin natin ang isang mas pangkalahatang pamamaraan para sa pagkalkula ng trinomial ng form na a2*x**2+a1*x+a0, na nagpapahintulot sa amin na itakda ang mga halaga ng parehong x at a0, a1, a2. Tawagin natin itong PXA:
: PXA C E4 E3 * + * + ;
Kapag gumagamit ng PXA, ang mga halaga ng a0, a1, a2, x ay dapat nasa kinakailangang pagkakasunud-sunod sa stack. Halimbawa: a0=1, a1=2, a2=-3, x=4
* 1 2 -3 4 PXA . D
Sa katawan ng isang pamamaraan, kasama ang mga pangunahing operasyon ng processor, maaaring may mga pamamaraan na tinukoy ng gumagamit. Halimbawa, maaari mong tukuyin ang isang pamamaraan P na, bilang karagdagan sa mga kalkulasyon na ginawa ng PXA, ay magbibigay ng kopya ng resulta sa terminal at aalisin ang resulta mula sa stack.
:PXA. D;
Sa partikular, ang katawan ng isang pamamaraan ay maaaring magsama ng pangalan ng pamamaraan na tinukoy, iyon ay, ang pamamaraan ay maaaring recursive. Halimbawa:
: ORAS [t] 1- ORAS ;
Binabawasan ng pamamaraang ito ang halaga ng tuktok ng stack ng 1 at muling tinutukoy ang sarili nito, ibig sabihin, gumagana ito bilang isang counter ng oras.
Ang TIME counter sa prinsipyo ay hindi maaaring huminto: ang pagbabawas ng isa ay isasagawa nang paulit-ulit habang tumatakbo ang processor. Ngunit sa DSSP mayroong mga tool na nagpapahintulot sa iyo na kontrolin ang kurso ng proseso depende sa mga resulta na nakuha - ang pagpapatakbo ng pamamahala ng kurso ng programa.
May kondisyong pagpapatupad at pag-uulit
Ang isang programa, na isang pagkakasunud-sunod ng mga utos na naisakatuparan sa pagkakasunud-sunod ng mga ito ay matatagpuan nang isa-isa sa talaan nito, ay tinatawag na linear. Upang gawing madaling nakikita (nababasa) at naiintindihan ang programa, nahahati ito sa mga pinangalanang bahagi na may tiyak na kahulugan - mga pamamaraan, bawat isa ay tinukoy ng sarili nitong pagkakasunud-sunod ng mga pamamaraan, na kung saan ay tinukoy ng mga pagkakasunud-sunod ng mas maliliit na pamamaraan, atbp. sa mga pamamaraang direktang tinukoy ng mga pagkakasunud-sunod ng mga utos ng PRSP. Ang nasabing programa, na isinulat bilang isang hierarchy ng mga kahulugan ng pamamaraan, ay tinatawag na structured. Ang paraan ng pagbuo ng isang nakabalangkas na programa, na binubuo sa unti-unting pagkabulok ng problema upang malutas sa mas maliit at mas maliliit na subtask, ay tinatawag na structured programming.
Ang paglikha ng hindi lamang linear, kundi pati na rin ang anumang mga programa sa pamamagitan ng paraan ng structured programming ay posible kung may mga operasyon para sa pagpapatupad ng isang pamamaraan ayon sa isang kondisyon, pag-uulit ng isang pamamaraan, at paglabas ng paulit-ulit na pamamaraan. Ang hanay ng mga ganitong uri ng command na available sa DSSP ay nagbibigay ng posibilidad ng structured construction ng isang arbitrary na programa.
Ang mga kundisyon para sa pagpapatupad o hindi pagpapatupad ng pamamaraan ay binuo na may kaugnayan sa pag-sign ng numero, mas tiyak, na nauugnay sa tanda ng halaga na kasalukuyang nasa tuktok ng stack. Ang pangunahing utos para sa conditional execution ng isang procedure - BRS (BRanch on Sign - branch by sign) ay nagtuturo na isagawa ang isa sa tatlong procedure na pinangalanan sa BRS, depende sa sign ng kasalukuyang halaga ng tuktok ng stack. Kapag nagsasagawa ng BRS, inaalis ng processor ang tuktok na elemento mula sa stack, sinusuri ang halaga nito, at kung negatibo ito, pagkatapos ay isinasagawa ang una sa mga pamamaraan sa itaas, kung katumbas ng zero, pagkatapos ay ang pangalawa, at kung positibo, pagkatapos ay ang pangatlo. Kaya team
ay magiging sanhi ng isang elemento na maalis mula sa stack at isagawa ang pamamaraan N kung ang inalis na halaga ay negatibo, isagawa ang pamamaraan P kung positibo, at isagawa ang pamamaraan Z kung katumbas ng zero.
Ang isang halimbawa ng paggamit ng BRS command ay ang sumusunod na kahulugan ng procedure SGN
: SGN [X] BRS -1 0 1 ;
Pinapalitan ng routine na ito ang value X sa tuktok ng stack ng -1 kung X<0, числом 0, если X=0, и числом 1, если X>0. Ang pamamaraan ng SGN ay makukuha sa PRSP bilang pangunahing operasyon ng processor.
Ang utos ng BRS, kasama ang pagpili ng isang pamamaraan mula sa tatlong data, ay nagbibigay ng kakayahang magpatupad ng mga operator na may dalawang halaga ng form na IF-THEN at IF-THEN-ELSE . Halimbawa, ang pahayag kung x>0 pagkatapos P1 iba pa P0 ay tumutugma sa utos na BRS P0 P0 P1, at ang pahayag kung x<>0 pagkatapos ay P - command BRS P NOP P, kung saan ang NOP ay ang pangalan ng isang walang laman na operasyon. Ngunit sa DSSP mayroong isang mas mahusay na pagpapatupad ng mga kondisyon na may dalawang halaga - ang mga utos na IF-, IF0, IF+, BR-, BR0, BR+.
Ang IF group command ay tumutugma sa IF-THEN na pahayag. Halimbawa, ang IF-P na utos ay nagtuturo na tanggalin ang tuktok na elemento mula sa stack at subukan ang sign nito, at kung ang elementong ito ay may minus sign, pagkatapos ay isagawa ang procedure P. Ang mga utos na IF0 P at IF+ P na order upang isagawa ang procedure P , ayon sa pagkakabanggit, sa kaso kapag ang inalis na elemento ay zero, at kapag ang halaga nito ay positibo.
Bilang isang halimbawa na naglalarawan ng paggamit ng mga utos ng pangkat ng IF, ipinakita namin ang kahulugan ng isang utos ng wikang base ng ABS na kinakalkula ang modulus ng tuktok ng stack.
: ABS [X] C KUNG-NEG [|X|] ;
Ang BR-, BR0, at BR+ na mga utos ay tumutugma sa IF-THEN-ELSE na pahayag, na nagtuturo sa iyong pumili ng isa sa dalawang pamamaraang tinawag pagkatapos ng mga ito. Kung ang tanda ng elementong inalis mula sa salansan ay tumutugma sa isa sa pagtatalaga ng utos, kung gayon ang pamamaraang pinangalanang una ay isasagawa, at kung hindi ito tumugma, ang pangalawang pamamaraan ay isasagawa. Halimbawa, ang command na BR0 P0 P1 ay nagtuturo na isagawa ang procedure P0 sa kaso kapag ang elementong inalis mula sa stack ay zero, at kung ang kundisyong ito ay hindi nasiyahan, pagkatapos ay isagawa ang procedure P1.
Ang isinasaalang-alang na mga utos ay nagpapahintulot sa iyo na matipid na i-program ang pagpapatupad ng pamamaraan depende sa mga ibinigay na kondisyon. Ang pinakakaraniwang kondisyon ng anyong x<0, x=0, x>0 ay direktang ipinatupad ng mga utos ng grupo ng IF. Kondisyon x<=0, x<>0, x>=0 ay nakaprograma gamit ang BR-, BR0, BR+ na mga tagubilin sa pamamagitan ng paggamit ng walang laman na operasyon ng NOP bilang unang pamamaraan. Halimbawa, ang pangungusap kung x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.
: HINDI [x] BR0 1 0 ;
Ang pagsasanga ng programa ay madalas na ginagawa pagkatapos ng mga utos ng paghahambing (<, =, >) na gumagawa ng lohikal na halaga ng 1 o 0 depende sa resulta ng paghahambing ng dalawang numero. Ang base language command na MAX, halimbawa, ay maaaring i-program tulad ng sumusunod:
: MAX C2 C2< IF+ E2 D ;
Kasama rin sa pangkat ng mga tagubilin sa sangay ang pagtuturo sa pagpili ng BR, na isinusulat bilang:
BR A1 P1 A2 P2 ... AK PK ... ISANG PN IBA P0
Kapag ipinapatupad ang pagtuturo na ito, ang processor ay unang nagsasagawa ng pointer procedure A1 at inihahambing ang halaga na itinulak nito sa stack sa halaga ng nakaraang tuktok ng stack sa ibaba nito. Kung ang mga halaga ay tumutugma, pagkatapos ay ang nangungunang dalawang elemento ay aalisin mula sa stack at ang pamamaraan na P1 na nauugnay sa pointer A1 ay isinasagawa, pagkatapos nito ang paglipat sa pagtuturo na sumusunod sa pagtuturo BR (ibig sabihin, sa itaas na entry, ang programa na sumusunod sa salitang P0 sa teksto). Kung ang mga inihambing na halaga ay hindi tumugma, pagkatapos ay ang isang nangungunang elemento ay aalisin mula sa stack (ibig sabihin, ang resulta ng A1) at ang parehong mga aksyon ay ginanap sa pares na A2 P2, kung gayon, kung ang tugma ay hindi gumana, kung gayon kasama ang pares na A3 P3, atbp. hanggang AN PN inclusive. Sa kaso kapag wala sa mga pagtatangka ang nagbigay ng tugma, ang pamamaraan na P0 na pinangalanan pagkatapos ng salitang ELSE ay isinasagawa. Karaniwan, ang mga numeric constant ay nagsisilbing pointer procedure, halimbawa:
[x] C BR 5 NEG -3 ABS 0 HINDI PA T0 [y]
Bilang resulta ng pagpapatupad ng linyang ito, ang halaga y=-5 ay makukuha sa tuktok ng stack kung x=5; y=3 kung x=-3; y=1 kung x=0 at y=0 kung hindi.
Sa pangkalahatan, ang isang pointer procedure ay maaaring hindi lamang isang numeric constant, kundi pati na rin isang variable o anumang iba pang pamamaraan na nakakatugon sa simpleng kinakailangan na hindi ito mag-pop ng kahit ano mula sa stack at itulak ang isang solong halaga sa stack.
Bilang isang paglalarawan kung paano ginagamit ang mga pagpapatakbo ng pagpapatupad ng kondisyong pamamaraan, baguhin natin ang pamamaraang TIME sa nakaraang seksyon upang huminto ang counter kapag ibinigay ang isang partikular na kundisyon:
: ORAS [t] 1- C KUNG+ ORAS ;
Ngayon ang TIME routine na ito ay tumatawag lamang sa sarili nito kapag ang tuktok ng stack ay positibo. Ang counter ay gagana nang eksakto N beses kung, sa simula ng unang pagpapatupad ng TIME, ang vertex ay naglalaman ng positibong numero N. Halimbawa, upang makakuha ng 7 bilang, kailangan mong tukuyin
7 beses<ВК>
Dahil ang IF+ sa depinisyon ng TIME, tulad ng anumang conditional operation, ay nag-aalis ng nasubok na elemento mula sa stack, at ang elementong ito ay kinakailangan para sa mga susunod na operasyon, kailangan itong ma-duplicate sa pamamagitan ng paglalagay ng C (Copy) na operasyon bago ang IF+.
Ang recursion ay hindi ang pangunahing paraan ng paulit-ulit na pagsasagawa ng isang pamamaraan. Para sa mga programming cycle sa wikang PARADISE, mayroong mga command na RP (Repeat - repeat) at DO (Do - do, perform).
Ang RP W command ay nagtuturo na isagawa ang procedure W nang paulit-ulit sa walang limitasyong bilang ng beses. Upang huminto ang mga pag-uulit, ang katawan ng W procedure ay dapat maglaman ng EX (Exit - exit) na operasyon na isinasagawa sa ilalim ng isang partikular na kondisyon. Ang EX operation ay tumalon sa pagpapatupad ng procedure na sumusunod sa program text pagkatapos ng paulit-ulit na procedure na naglalaman ng EX operation na ito. Kaya, ang counter, na ipinatupad sa itaas bilang isang recursive procedure TIME, ay maaaring i-program bilang isang pag-uulit ng procedure W, na tinukoy bilang mga sumusunod:
: W [t] 1- C IF0 EX ;
Upang magawa ang counter ng 25 beses, kailangan mong isagawa ang linya
Kasama ang EX operation, na ginagamit sa conditional execution commands, mayroong EX-, EX0, EX+ conditional exit operations na may parehong epekto tulad ng IF-EX, IF0 EX, IF+ EX commands, ibig sabihin, ubusin ang tuktok na elemento. na sumusubok sa pag-sign nito at paglabas kung tumutugma ang karatula sa tinukoy sa pagtatalaga ng operasyon. Ang mga operasyong EX, EX-, EX0, EX+ ay maaaring gamitin hindi kinakailangan sa katawan ng pinaka-ulit na pamamaraan (sa aming kaso, W), kundi pati na rin sa mga pamamaraan na tinutukoy nito.
Bilang halimbawa, isaalang-alang ang problema sa paghahanap ng pinakamalaking karaniwang divisor ng dalawang natural na numero gamit ang Euclidean method. Ang kakanyahan ng pamamaraan ay kinakailangan na ibawas ang isang mas maliit na numero mula sa isang mas malaking numero hanggang ang mga numero ay maging pantay sa bawat isa. Sa pag-abot sa pagkakapantay-pantay, at ang pinakamalaking karaniwang divisor ay matatagpuan.
Ang programming ay isasagawa gamit ang top-down na paraan ng pagbuo. Una, tinutukoy namin ang pamamaraan ng GCD na nag-aayos sa pangkalahatang pamamaraan ng algorithm. Ang mga parameter ng pamamaraang ito ay dalawang numero M at N sa stack, kung saan matatagpuan ang pinakamalaking karaniwang divisor. Sa katawan ng pamamaraan ng GCD, dapat tukuyin ang isang paikot na proseso ng pag-convert ng mga halaga sa stack. Bilang resulta ng prosesong ito, dalawang pantay na numero ang dapat manatili sa stack - alinman sa mga ito ay maaaring kunin bilang ang pinakamalaking karaniwang divisor. Sa mga pagsasaalang-alang na ito, ang pamamaraan ng GCD ay maaaring tukuyin bilang mga sumusunod.
: gcd RP STEP [nod(M,N),nod(M,N)] D [nod(M,N)] ;
Ngayon ay kinakailangan na mag-program ng isang hakbang ng proseso ng umuulit, i.e. tukuyin ang pamamaraan ng HAKBANG. Ang mga parameter nito ay dalawang numero sa stack. Kailangan mong ihambing ang mga numerong ito at lumabas sa loop kung pantay ang mga ito, kung hindi, ibawas ang mas maliit sa mas malaki. Magagawa ito, halimbawa, tulad nito:
: HAKBANG C2 C2 - BRS NOP EX E2 C2 - ;
Ngayon ay wala nang hindi natukoy na mga pamamaraan na natitira sa programa at maaari mong simulan ang pagsubok nito. Ang pagsusuri ay dapat isagawa mula sa ibaba pataas, ibig sabihin, kailangan mo munang tiyakin na ang pamamaraan ng STEP ay gumagana nang tama, at pagkatapos lamang - ang GCD.
Ang pagpapatakbo ng batayang wika na DO ay nagiging sanhi ng pamamaraang ipinangalan dito na paulit-ulit na N beses, kung saan ang N ay ang numerong nasa tuktok ng stack sa oras na ang DO ay naisakatuparan. Halimbawa, upang ang pamamaraan P ay maisakatuparan ng 8 beses, kailangan mong tukuyin
8 D.O.P
Kung mayroong hindi bababa sa isang exit operation sa katawan ng procedure P, at ang kondisyon para sa pagpapatupad nito ay nasiyahan bago mangyari ang tinukoy na bilang ng mga pag-uulit, pagkatapos ay ang mga pag-uulit ay wawakasan sa pamamagitan ng paglabas sa pamamaraan, tulad ng ginagawa sa kaso ng operasyon RP. Halimbawa, kung inuulit ng DO ang pamamaraan sa itaas na W, na ang kahulugan ay naglalaman ng IF0 EX, ang pagsulat ng [T] 30 DO W ay magdudulot ng 30 pag-uulit ng W kung ang halaga ng T>=30. Kung 0 Kung sa oras na ang operasyon ng DO ay naisakatuparan, ang tuktok ng stack ay may zero o negatibong halaga, kung gayon ang pamamaraan na sumusunod sa DO ay hindi isasagawa kahit isang beses. Upang ilarawan ang paggamit ng operasyon ng DO, tinukoy namin ang pamamaraang NUM, na binibilang ang bilang ng mga non-zero bits sa 32-bit na salita x na tinukoy sa tuktok ng stack. Ang counter ng bilang ng mga unit ay ilalagay sa tuktok ng stack. Ang pagbibilang ng mga unit ay bubuo sa pag-uulit ng NUMI procedure nang 32 beses, kung saan susuriin natin ang isang bit ng salitang x. Sa paglabas sa loop, ang nais na numero ay dapat na nasa tuktok ng stack. : NUM [x] 0 E2 32 DO NUMI D [N] ; Upang mabilang ang mga di-zero na bit, ginagamit namin ang katotohanan na ang yunit sa pinakamataas (ika-31) bit ng salita ay isang senyales ng negatibong numero. Kung negatibo ang salitang pinag-aaralan, dapat magdagdag ng isa sa N. Sa pagtatapos ng pamamaraan ng NUMI, kailangan mong ilipat ng kaunti pakaliwa ang salitang pinag-aaralan. : NUMI C IF- N+ SHL ; Ang pagpapatupad ng N+ procedure ay medyo simple: kailangan mong magdagdag ng isa sa tuktok ng stack nang hindi binabago ang tuktok. : N+ E2 1+ E2 ; Ang mga paulit-ulit na pamamaraan ay maaaring maglaman ng mga operasyon ng RP at DO sa kanilang mga katawan, na humahantong sa mga nested loop, at pinapayagan ang anumang lalim ng nesting. Sa kasong ito, mayroong isang EXT na operasyon para sa paglabas sa nested loop, na nagpapahiwatig ng lalim ng nesting sa tuktok ng stack. Halimbawa, ang paglabas mula sa dalawang nested na mga loop ay maaaring tukuyin tulad ng sumusunod: Dapat tandaan na ang paggamit ng EXT command ay nangangailangan ng karagdagang pangangalaga, dahil kapag binago ang programa, ang nesting depth ng mga loop ay maaaring magbago at ang kaukulang pare-pareho bago ang EXT ay kailangang baguhin. Ang operand stack ay ang pangunahing, ngunit hindi ang tanging mekanismo para sa pagmamanipula ng data sa PRSP. Posible rin, kasama ng mga kahulugan ng pamamaraan, na magdeklara ng mga elemento at karaniwang organisadong mga koleksyon ng mga elemento ng data (tinatawag na mga istruktura), na magagamit para gamitin sa kanilang mga pangalan. Sa pamamagitan ng pagpapatupad ng mga deklarasyon ng data, inilalaan ng processor ang memorya na kinakailangan para sa kanilang imbakan at nagbibigay ng mga kinakailangang mekanismo para sa pag-access sa memorya na ito. Ang batayang PRSP na wika ay may kasamang bilang ng mga direktiba na salita na tinalakay sa ibaba para sa pagdedeklara ng mga variable at array. Upang mapalawak ang wika ng system, ang iba pang mga salita ng ganitong uri at, nang naaayon, iba pang mga elemento at istruktura ng data ay maaaring ipasok dito. Ang salitang VAR ay nagdedeklara ng 16-bit na variable na numero. Halimbawa, ang entry nagdedeklara ng variable X, ibig sabihin, nagsasabi sa processor na ang pangalan X ay ang pangalan ng variable. Iniuugnay ng processor sa pangalang ito ang isang 16-bit na lokasyon ng memorya na mag-iimbak ng halaga ng variable na ito. Ang pagtuturo upang italaga ang halaga sa variable X, na nakapaloob sa tuktok ng operand stack, ay Sa pamamagitan ng pagsasagawa ng command na ito, inaalis ng processor ang nangungunang elemento mula sa stack at isusulat ang halaga nito sa cell na inilaan para sa variable na X. Ang isang utos na binubuo lamang ng pangalan ng isang variable, bago kung saan walang titik !, ay nagiging sanhi ng halaga ng variable na ito na itulak sa stack, at ang pag-upload ay isinasagawa sa pamamagitan ng pagkopya ng mga nilalaman ng kaukulang memory cell, ibig sabihin, ang halaga ng variable ay nananatiling hindi nagbabago. Kaya, ang anumang paglitaw ng pangalan ng variable na X sa programa, kung hindi ito agad na mauunahan ng isang salitang nagrereseta ng ibang aksyon, ay itulak ang kasalukuyang halaga ng variable na ito sa stack, tulad ng mga direktang ibinigay na numero (numeric literals) ay tinutulak. Bilang halimbawa, nagbibigay kami ng isa pang bersyon ng GCD procedure na tinalakay sa itaas, kung saan dalawang gumaganang variable ang ginagamit. : NOD! X! Y RP HAKBANG X [GCD] ; : HAKBANG X Y = EX+ X Y BR+ X-Y Y-X ; : X-Y X Y - ! X; : Y-X Y X - ! Y ; Tulad ng nakikita mo, ang programa ay naging medyo mas mahaba, ngunit ang kalinawan nito ay tumaas. Ang salitang VCTR ay nagdedeklara ng isang one-dimensional na array (vector) ng 16-bit na mga cell, at ang bilang ng pinakamataas na elemento ng array na ito ay ibinibigay ng halaga ng vertex. Halimbawa, bilang resulta ng pagsulat 9 VCTR ROW, ang processor ay naglalaan ng 10 sequentially addressable 16-bit words of memory, na bumubuo ng ROW(0:9) vector. Una, ang numero 9 ay itinutulak sa stack, at pagkatapos ay ang VCTR procedure ay isasagawa, gamit ang tuktok na elemento ng stack upang matukoy ang haba ng ROW vector na gagawin. Itulak sa stack ang halaga ng j-th na elemento ng vector ROW, 0<=j<=9, задается командой [j]ROW Gamit ang numero ng elemento sa stack bilang isang parameter, pinapalitan ng pangalan ng vector na ROW ang numerong iyon ng halaga ng katumbas na elemento. Kung mayroong isang salita! kaagad bago ang pangalan ng ROW vector, ang halaga ng subnode ay itatalaga sa elementong ipinahiwatig ng vertex ng vector na ito, at ang stack depth ay nababawasan ng 2. Halimbawa, maaari mong i-reset ang Ika-5 elemento ng ROW vector gaya ng sumusunod: Mayroon ding posibilidad ng pagsasama-sama ng mga pare-parehong vectors, i.e. mga vector ng 16-bit na mga numero na ang mga halaga ay tinukoy kapag ito ay ipinahayag at hindi nagbabago sa hinaharap. Kaya, ang isang vector ng 16-bit constants VC ng haba L+1 ay idineklara gamit ang salitang CNST sa anyo: CNST VC k0 k1 ... kL ; kung saan ang k0, k1, ... kL ay mga utos na nagtutulak ng isang halaga sa stack. Kadalasan, ang mga ito ay mga literal na numero lamang, ngunit maaari ding mayroong mga pangalan ng mga variable, mga pamamaraan, pati na rin ang mga utos na binubuo ng mga pares ng mga salita, tulad ng, halimbawa, ang utos na ipadala ang address ng variable na "X" na tinalakay sa ibaba . Ang pag-access sa mga elemento ng isang pare-parehong vector ay ginagawa sa parehong paraan tulad ng sa mga bahagi ng mga regular na vector, halimbawa: Ang isang multidimensional na hanay ng mga 16-bit na salita ay idineklara gamit ang salitang ARR, na sinusundan ng maximum na mga halaga ng index para sa bawat dimensyon at ang bilang ng mga dimensyon. Halimbawa, ang three-dimensional array na TIR(0:8,0:2,0:24) ay idineklara nang ganito: Ang numero 3 kaagad bago ang ARR ay nagpapahiwatig ng dimensyon ng ipinahayag na array. Ang pagtulak ng elemento ng isang array papunta sa stack ay makakamit sa pamamagitan ng pagbibigay ng index ng elementong iyon, na sinusundan ng pangalan ng array. Halimbawa, ang utos na itulak ang elementong TIR(0,2,2) sa stack ay ipinahayag bilang Alinsunod dito, ang pagtatalaga ng kasalukuyang halaga ng tuktok ng stack sa elementong ito ay ibinibigay ng command Ang lahat ng isinasaalang-alang na mga halimbawa ay naglalarawan ng paglikha ng mga istruktura mula sa 16-bit na mga salita. Gayunpaman, pinapayagan din ng wika na tukuyin ang mga istruktura ng 32-bit na salita at 8-bit na byte. Upang gawin ito, ang salitang tumutukoy sa istraktura ay may prefix na LONG o BYTE, ayon sa pagkakabanggit. Halimbawa, 5 BYTE VCTR X - kahulugan ng isang 6 na bahagi ng byte vector X; BYTE CNST Y 65 66 67 ; - kahulugan ng isang 3-component byte vector-constant Y; 10 20 2 LONG ARR MTRX - kahulugan ng matrix ng mahabang salita MTRX(0:10,0:20). Ang pagbabasa ng mga elemento ng mga istruktura ng salita at byte ay ginagawa sa eksaktong parehong paraan tulad ng sa kaso ng 16-bit na mga istruktura ng salita. Kung ang haba ng elemento ay mas mababa sa 32 bits, ang nakuhang halaga ay inilalagay sa mababang salita o byte ng tuktok ng stack, at ang mataas na bahagi ng tuktok ay nakatakda sa zero. Ang mababang salita o byte ng 32-bit na longword sa stack ay kinukuha din bilang halaga na itinalaga sa isang elemento ng isang salita o byte na istraktura. Bagama't ginagamit ang 16-bit na format ng salita kapag tinutukoy ang data bilang default, mayroon din itong notation na WORD. Maipapayo na gamitin ang prefix na ito kapag ang programa ay dapat na ilipat sa iba pang mga makina, kung saan ipinatupad din ang DSSP at maaaring iba ang default. Ang mga istruktura ng data ng byte ay kadalasang ginagamit upang mag-imbak at magproseso ng impormasyon sa teksto. Ito ay dahil sa ang katunayan na ang isang byte ay inilalaan sa memorya ng computer upang i-encode ang isang character. Upang itakda ang mga code ng mga character sa PARADISE na wika mayroong isang construction #l, kung saan ang l ay anumang character na available sa keyboard ng computer. Ang DSSP processor ay nakikita ang konstruksyon na ito bilang isang utos na itulak ang titik l sa stack. Halimbawa: Ang konstruksiyon na ito ay nagsasagawa ng parehong mga aksyon bilang isang numeric literal na katumbas ng code ng tinukoy na character, ngunit ang paggamit nito ay mas kanais-nais, dahil, una, ito ay nagpapalaya sa iyo mula sa pangangailangan na matandaan ang mga code at, pangalawa, ginagawang mas nauunawaan ang mga programa. Ang isa, sa partikular, ay maaaring magbigay ng sumusunod na kahulugan ng pare-parehong vector Y: BYTE CNST Y #A #B #C ; Madalas na maginhawang gamitin ang simbolikong notasyon para sa isang numeric constant sa isang programa. Upang maibigay ang posibilidad na ito, mayroong isang tumutukoy na salitang VALUE: Ang command na ito ay nagpa-pop sa tuktok na elemento mula sa stack at bubuo ng salita na may pangalang kasunod kaagad ng VALUE. Ang paggamit ng salitang ito ay katumbas ng paggamit ng numerical constant. Halimbawa: Ang mga itinuturing na tool ay nagbibigay ng posibilidad ng pagbibigay ng pangalan sa data at pagmamanipula ng data anuman ang address system ng computer. Ngunit kasama rin sa base na wika ang mga tool na nagbibigay-daan sa iyong manipulahin ang mga address ng mga elemento ng memorya. Ang address ng isang variable o array element X ay itinutulak sa stack ng command Sa kaso ng isang elemento ng array, ang command na ito ay nauuna sa halaga ng index(es). Pinapalitan ng batayang pagtuturo ng wika @ ang address ng isang mahabang memory word sa tuktok ng stack ng halaga na naglalaman ng mahabang salita. Halimbawa, ang halaga ng variable Y ay maaaring itulak sa stack sa pamamagitan ng pagsasagawa ng sumusunod na linya: Pinapalitan ng pagtuturo ng @B ang address ng halaga ng katumbas na byte, kung ipagpalagay na ang mataas na byte ng tuktok ng stack ay zero, at pinapalitan ng pagtuturo ng @L ang address ng isang 32-bit na salita. Mayroon ding mga tagubilin para sa pagsulat ng mga halaga sa memorya. Ang !T command ay nagsusulat ng 16-bit na sub-top na halaga sa address na lumabas mula sa tuktok ng stack. Ang !TB command ay nagdudulot ng katulad na pagsulat ng mababang byte ng subnode sa byte na tinutugunan ng node, at isinulat ng !TL ang 32-bit na salita ng subnode sa salitang tinutugunan ng node. Halimbawa, maaari mong italaga ang value na 15 sa ikalimang elemento ng byte vector BV(0:5) gamit ang mga sumusunod na command: 15 5" B.V.!TB Ang pangangailangan na magtrabaho kasama ang memorya sa mga pisikal na address ay karaniwang lumitaw kapag lumilikha ng mga programa na nakasalalay sa arkitektura ng isang partikular na computer, halimbawa, kapag lumilikha ng mga driver ng input / output. Upang makakuha ng higit na kahusayan at pagiging compact ng mga programa, ang mga sumusunod na operasyon ay ipinakilala sa wikang PARA: 0 <имя переменной>- i-reset ang variable; 1 <имя переменной>- magtalaga ng isang yunit sa isang variable; 1- <имя переменной>- bawasan ang halaga ng variable ng isa; 1+ <имя переменной>- dagdagan ang halaga ng variable ng isa; !- <имя переменной>- ibawas ang halaga ng tuktok ng stack mula sa variable; !+ <имя переменной>- idagdag ang halaga ng tuktok ng stack sa variable. Ang bawat isa sa mga operasyong ito ay madaling na-program gamit ang read at write na mga variable command. Halimbawa, 0 X ay katumbas ng 0 ! X 1+ X ay katumbas ng X 1+ ! X Ang X ay katumbas ng X E2 - ! X Ang paggamit ng mga operasyong ito ay nagpapataas ng kahusayan at kakayahang makita ng mga programa. Sa pagsasagawa, madalas na kinakailangan upang magtalaga ng isang solong halaga sa lahat ng mga elemento ng isang array. May operasyon para dito sa PARADISE language!!!<имя массива>. Ang aksyon nito ay upang italaga ang halaga ng tuktok ng stack sa lahat ng mga bahagi ng tinukoy na array. Operasyon!!! naaangkop sa mga array na may mga elemento ng anumang format. Halimbawa ng paggamit: ang character code na "space" ay nakasulat sa lahat ng bahagi ng BUF byte array. Kadalasan ay kinakailangan upang makakuha ng impormasyon tungkol sa istruktura ng data sa likod ng isang pangalan sa isang programa. Isang pares ng command na SIZE? - bigyan ang format ng elemento ng data: 1, 2 o 4 bytes, at DIM? - ibalik ang bilang ng mga elemento ng data sa istraktura. Halimbawa, kung ang data ay ipinahayag 3 4 2 MAHABANG ARR Z pagkatapos ay may kaugnayan sa kanila, ang mga utos na ito ay magbibigay ng sumusunod na resulta (decimal number): SIZE? X SIZE? Y SIZE? Z DIM? X DIM? Y DIM? Z Kasama sa set ng pagtuturo ng DSSP-processor, bilang karagdagan, ang apat na tagubilin na nagbibigay-daan sa iyong magbasa at magsulat ng mga indibidwal na piraso ng mga cell ng memorya ng computer. Ito ang mga utos ng @BI, !BI, !BI0, !BI1. Ang mga parameter para sa bawat isa sa kanila ay ang address ng memory word sa stack at ang bilang ng mga bits sa salitang ito (tandaan na ang mga bit ay binibilang mula kanan hanggang kaliwa, simula sa zero). Ipinapalagay din ng !BI command ang presensya sa stack at ang halaga ng bit na isusulat. Pinapalitan ng @BI command ang mga tinukoy na parameter ng value ng napiling bit (0 o 1), ang !BI0 at!BI1 commands ay nagtatalaga ng value na 0 at 1 sa napiling bit, ayon sa pagkakabanggit, inaalis ang kanilang mga parameter mula sa stack, at ang Itinatakda ng !BI command ang napiling bit sa pinakamaliit na bahagi ng ikatlong elemento ng stack at inaalis ang lahat ng tatlong parameter nito mula sa stack. Halimbawa, kung ang halaga ng variable X ay ang binary number na 101101, ang mga resulta ng mga nakalistang operasyon ay ang mga sumusunod: " X [addr. X] 3 @BI - ikatlong bit ng X, 0 " X 3 !BI - X ay 100101, " X [addr.X] 0 !BI0 - X ay 100100, " X [addr.X] 1 !BI1 - X ay 100110. Ang wikang PARADISE ay mayroon ding mga pasilidad para sa pagtatrabaho sa mga string ng byte na matatagpuan sa memorya. Upang tukuyin ang isang string ng mga byte, dalawang parameter ang itinutulak sa stack: ang panimulang address ng string (ibig sabihin, ang address ng unang byte nito) at ang haba ng string (ang bilang ng mga byte sa loob nito). Ang !!!MB command ay ginagamit upang italaga ang lahat ng byte ng isang string sa isa (ibinigay sa stack) na halaga. Kumokonsumo ito ng tatlong parameter mula sa stack: , kung saan ang b ay ang halaga na itatalaga, ang a at l ay ang panimulang address at haba ng byte string, ayon sa pagkakabanggit. Hayaan, halimbawa, kailangan mong i-zero out ang mga elemento mula sa ika-3 hanggang ika-10 byte array TXT(0:20). Upang gawin ito, maaari mong patakbuhin ang sumusunod na linya: 0 3" TXT 8 !!!MB bilang resulta, walong magkakasunod na elemento ng tinukoy na array, simula sa ika-3, ay makakatanggap ng halagang 0. Ang isang katulad na command!!!MW ay idinisenyo upang punan ang pagkakasunud-sunod ng mga 16-bit na salita na may parehong halaga (ang bilang ng mga salita ay ipinahiwatig sa tuktok ng stack), at ang utos! !!M - upang punan ang isang pagkakasunod-sunod ng mahabang salita. Ang !SB command ay nagpapadala ng mga byte string. Ang mga parameter nito ay: , kung saan ang a1 at l ay ang panimulang address at haba ng ipinasa na string, ang a2 ay ang panimulang address ng string kung saan isinasagawa ang pagpapasa. Bilang resulta ng pagpapatupad ng!SB command, isang byte string na may haba l ang makikita sa memorya mula sa address a2, na isang eksaktong kopya ng string na matatagpuan sa address a1 bago isagawa ang paglipat. Maaaring mag-overlap ang source string at destination string. Hayaan, halimbawa, gusto mong ilipat ang mga elemento ng byte array M(0:10) gaya ng sumusunod: M(10):=M(9), M(9):=M(8), ..., M(1):= M(0). Upang gawin ito, maaari mong gamitin ang command!SB: 0" M 10 C2 1+ !SB bilang resulta, ang isang string ng 10 byte ay ililipat ng isang byte sa direksyon ng pagtaas ng mga address ng memorya. Ang!SB command ay maginhawa para sa pagtatrabaho sa mga string ng mga character (tandaan na ang bawat karakter ay naka-encode ng isang byte). Nagbibigay-daan ito, halimbawa, na italaga sa isang byte array ang halaga ng isang tahasang ibinigay na literal na string. Upang tukuyin ang gayong string, ginagamit ang literal na teksto, i.e. isang naka-quote na pagkakasunud-sunod ng mga character, tulad ng "TEXT LITERAL". Ang construct na ito, kapag nakatagpo sa isang programa, ay nagiging sanhi ng panimulang address at haba ng isang byte string na naglalaman ng naka-quote na teksto na maitulak sa stack. Ang mga opsyon na ito ay maaaring gamitin sa !SB command. Halimbawa, ang fragment na "TABLE" 0 " TN !SB ay magiging sanhi ng literal na "TALAHANAYAN" na ilipat sa TN array. Ang utos ng SRCHB ay naghahanap ng ibinigay na byte sa isang string. Mga Parameter: , kung saan ang b ay ang byte na ang unang paglitaw ay makikita, a at n itakda ang address ng simula at ang haba ng string na hahanapin, ayon sa pagkakabanggit. Kung n>0, ang paghahanap ay isinasagawa mula sa address a hanggang sa address ng + n-1 (sa direksyon ng pagtaas ng mga address), kung n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры: #T "TEXT" SRCHB #Isang "TEXT" SRCHB #E "TEXT" [#E,a,4] 1- + -4 [#E,a+3,-4] SRCHB [-2] Tinatapos ang pagsusuri ng mga paraan ng pagtatrabaho sa data, pag-isipan natin ang isyu na may kaugnayan sa pag-iimbak ng data sa panlabas na memorya ng isang computer, i.e. sa mga magnetic disk. Ang wikang PARADISE ay may utos na SAVE<имя файла>Nagtuturo na mag-imbak ng isang kopya ng pangunahing memorya ng system sa disk, kasama ang mga bagay na tinukoy ng gumagamit. Sa kasong ito, ang mga lugar ng memorya na inilaan para sa data ng mga operasyon ng VAR, VCTR, ARR ay hindi ipinapakita sa disk. Bilang isang resulta, kapag ang naka-save na sistema ay na-load mula sa disk, ang mga halaga ng tinukoy na data ay hindi tinukoy (dapat silang matukoy sa panahon ng pagpapatupad ng programa). Sa karamihan ng mga kaso, ito ay makatwiran, dahil hindi na kailangang gumastos ng puwang sa disk upang mag-imbak ng mga gumaganang variable, buffer, atbp. Gayunpaman, may mga data na ang mga halaga ay dapat matukoy kaagad pagkatapos mag-boot ang system mula sa disk. Ang isang halimbawa ay isang variable na nag-iimbak ng bilis ng pagpapalitan ng data sa ilang panlabas na device. Kapag lumipat sa isa pang exchange rate, sapat na upang baguhin ang halaga ng variable na ito nang hindi gumagawa ng anumang mga pagwawasto sa programa. Ang indikasyon sa processor na ang mga halaga ng mga elemento ng isang tiyak na istraktura ng data ay dapat isulat sa disk sa SAVE command ay ang FIX prefix na inilagay bago ang kahulugan ng istraktura, halimbawa Ayusin ang VAR SPEED 20 FIX BYTE VCTR TABL Ang pagtatrabaho sa mga istruktura ng data na tinukoy sa paraang ito ay hindi naiiba sa pagtatrabaho sa mga istrukturang tinukoy sa karaniwang paraan. Sa wikang PARADISE mayroong isang maliit na grupo ng mga utos na idinisenyo upang kontrolin ang PRSP processor, o sa halip, ang emulator ng PRSP processor. Ang RESTART command ay nagiging sanhi ng pag-restart ng processor. Sa kasong ito, ang stack ay na-clear, ang isang mensahe ay ipinapakita Bersyon ng DSSP XX.XX.XX Libreng XXXXXXW at ang processor ay napupunta sa command input waiting mode. Ang utos na ito ay kapaki-pakinabang kapag nagde-debug ng mga programa. Isinasagawa din ito sa kaso ng mga sitwasyon ng error: index sa labas ng mga hangganan ng array, pagkaubos ng libreng memorya, atbp. Ang utos na \G ay ginagamit upang ipagpatuloy ang pagpapatupad ng programa pagkatapos huminto sa isang hindi natukoy na salita. Kung, sa panahon ng pagpapatupad ng pamamaraan, ang processor ay nakatagpo ng isang sanggunian sa isang hindi natukoy na salita, naglalabas ito ng isang mensahe: huminto hindi mo alam<слово> . kung saan ang tuldok ay ang PRSP processor prompt, na nagpapahiwatig na ang processor ay nasa estado ng paghinto sa isang hindi natukoy na salita. Sa mode na ito, maaari mong isagawa ang anumang mga utos ng processor, tulad ng sa normal na mode, kapag ang asterisk ang prompt. Mayroong dalawang paraan upang lumabas sa mode na ito - alinman sa pamamagitan ng pagpapatupad ng \G na utos (pagkatapos ay ipagpapatuloy ng processor ang pagsasagawa ng nagambalang pamamaraan, laktawan ang hindi natukoy na salita), o sa pamamagitan ng RESTART na utos. Ang EXEC command ay nagtuturo sa processor na isagawa ang procedure na ang address ay nasa tuktok ng stack. Para makuha ang address ng isang procedure, gamitin ang command na "" (dalawang apostrophe) na sinusundan ng pangalan ng procedure. Halimbawa, bilang resulta ng pagpapatupad ng utos ang address ng ABS procedure ay itutulak sa stack. Ang mga utos na ito ay nagpapahintulot sa iyo na ipasa ang isang pamamaraan bilang isang parameter sa isa pang pamamaraan. Ang nabanggit na SAVE operation ay kabilang sa grupo ng mga processor control command.<имя файла>, na nagtuturo na mag-save ng isang kopya ng system sa disk, pati na rin ang mga utos na tumutukoy sa mapagkukunan ng input ng impormasyon ng teksto na ibinibigay sa processor. Sa una, ang source na ito ay ang display keyboard. LOAD command<имя файла>inililipat ang input sa isang disk file na may tinukoy na pangalan. Command PF - nagtuturo na magpasok ng mga command mula sa buffer ng text editor. Ang utos ng TEXEC ay nagpapadala ng isang text string sa input ng processor, na ang mga parameter ay tinukoy sa stack. Kapag ang mga utos na nakapaloob sa mga tinukoy na mapagkukunan ay naisakatuparan, ang input ay awtomatikong lilipat sa display keyboard. Ang input command stream na nakikita ng processor ay maaaring, sa partikular, ay naglalaman ng mga tagubilin para sa pagtukoy ng mga pamamaraan at data, na nagiging sanhi ng pagsasama-sama sa isang panloob na representasyon at pag-iimbak ng katawan ng pamamaraan o paglalaan ng memorya para sa tinukoy na data, pati na rin ang pagpasok ng pangalan ng pinagsama-samang pamamaraan. o istruktura ng data sa diksyunaryo ng PRSP. Ang diksyunaryo ay nagtatatag ng isang sulat sa pagitan ng panlabas (ginamit sa teksto ng programa) na mga pangalan at address ng mga bagay na naaayon sa mga pangalang ito sa panloob na representasyon. Kapag pinoproseso ang kahulugan ng isang pamamaraan o paglalarawan ng isang pinangalanang ibinigay, ang processor ay bubuo ng isang diksyunaryo, na bumubuo dito ng isang bagong entry sa diksyunaryo na naglalaman ng pangalan (mas tiyak, ang unang 7 character ng pangalan) at ang address ng katawan ng pamamaraan o data descriptor na nauugnay sa pangalang ito. Sa top-down na programming, ang mga procedure body ay maaaring maglaman ng mga reference sa mga bagay na hindi pa natukoy. Sa kasong ito, ang mga entry sa diksyunaryo (mga header) ay nabuo sa diksyunaryo, na minarkahan ng tanda ng kawalan ng katiyakan. Gamitin ang UNDEF command para ipakita ang lahat ng hindi natukoy na pangalan. Sa kurso ng paglago ng diksyunaryo, posibleng bumuo ng mga subdictionaries - pinangalanang mga koleksyon ng mga entry sa diksyunaryo. Karaniwang pinagsasama ng isang subdictionary ang mga pamamaraan at istruktura ng data na nauugnay sa parehong gawain. Upang maiwasan ang pagkalito sa pagitan ng mga pangalan ng mga subdictionary at iba pang mga object ng programa, ang pangalan ng isang subdictionary ay dapat magsimula sa titik $. Ang pag-access sa mga subdictionary para sa kanilang paglaki o paggamit ay maaaring buksan at isara gamit ang mga espesyal na command, na kinabibilangan ng mga sumusunod (ang pangalang $v ay nangangahulugang anumang wastong subdictionary). GROW $v - palaguin ang $v subdictionary, ibig sabihin, hanggang sa tinukoy, ilagay ang mga pangalan ng lahat ng pinagsama-samang pamamaraan at data sa $v subdictionary; USE $v - bukas para magamit (para maghanap ng mga pangalan sa loob nito) $v subdictionary; SHUT $v - isara ang posibilidad ng paggamit ng $v subdictionary; ONLY $v - gawin lamang ang $v subdictionary na magagamit para magamit; CANCEL - kanselahin ang huli LAMANG. Mayroon ding ?$ na utos na nagpi-print sa display ng mga pangalan ng lahat ng subdictionary ng kanilang estado - bukas man o sarado ang search subdictionary. Ang subdictionary na ang pangalan ay naka-print sa itaas ay palaging incremented. Ang mga batayang pamamaraan ng PRSP ay bumubuo ng isang subdictionary na pinangalanang $PRIME na bukas para sa paggamit at paglago bilang default, ibig sabihin, kung walang utos na atasan ang ibang subdictionary na lumago. Hayaan, halimbawa, ang operasyon?$ i-print ang susunod na estado ng mga subdictionaries. Bukas ang $PRG Binuksan ang $PRIME sarado ang $EDIT Binuksan ang $PRIME SYSTEM sarado Nangangahulugan ito na ang $PRG ay kasalukuyang bukas para sa pagtaas at paggamit, ang $PRIME ay para sa paggamit lamang, at ang $EDIT at SYSTEM ay hindi magagamit. Tandaan na ang isang subdictionary ay maaaring binubuo ng ilang mga seksyon na may parehong pangalan. May mga utos para sa pagtanggal mula sa diksyunaryo ng isa o isa pang hanay ng mga entry sa diksyunaryo at, marahil, mga panloob na bagay na nauugnay sa kanila. Kaya, ang FORGET $v command ay nag-aalis ng lahat ng pangalang ipinasok sa diksyunaryo (hindi lamang ang $v subdictionary) mula noong huling pagpapatupad ng GROW $v command, kasama ang mga bagay na tinutukoy ng mga pangalang iyon, at inaalis ang paglago ng $v subdictionary na itinakda nito. Ang utos ng PROGRAM $v ay gumaganap ng parehong mga aksyon tulad ng sunud-sunod na FORGET $v GROW $v command. Ang pagkakaroon ng naturang command sa simula ng anumang programa ay humahantong sa katotohanan na kapag ang programa ay muling pinagsama-sama, ang lumang kopya nito ay tatanggalin at isang subdictionary ay bubuo upang iimbak ang mga bagay ng bagong kopya ng programa. Halimbawa, ang pagsasagawa ng FORGET $PRIME na operasyon sa diksyunaryo na ang estado ay ipinakita sa itaas, nakakakuha kami ng bagong estado: sarado ang $EDIT Binuksan ang $PRIME SYSTEM sarado Sa panahon ng pagpapatupad ng FORGET command, ang mga pangalan ng mga seksyon na tatanggalin ay ipinapakita. Tandaan na ang pangalan ng subdictionary ng SYSTEM ay hindi nagsisimula sa $. Ito ay pinapayagan, ngunit ito ay humahantong sa katotohanan na ang paglalapat ng FORGET at RPOGRAM na mga utos sa subdictionary na ito ay hindi nagiging sanhi ng anumang mga aksyon (ang SYSTEM subdictionary ay tila hindi umiiral para sa kanila). Sa pagtingin sa katotohanan na sa natapos na programa para sa napakaraming mga pamamaraan ay hindi kinakailangan na tumawag sa pamamagitan ng isang panlabas na pangalan, posible na alisin ang kanilang mga pangalan mula sa diksyunaryo habang pinapanatili ang mga panloob na bagay na nauugnay sa kanila. Ang CLEAR $v command ay nag-aalis ng lahat ng pangalan mula sa lahat ng mga seksyon ng $v subdictionary, maliban sa mga nauna sa program text (noong sila ay tinukoy) ng prefix:: (dalawang colon). Halimbawa, bilang isang resulta ng pagpapatupad ng sumusunod na fragment ng programa ng processor: :: : X+ Y !+ X ; I-CLEAR ang $EXAM na ang mga pangalan lang na X at X+ ang mananatili sa subdictionary ng $EXAM, aalisin ang entry sa diksyunaryo Y (bagama't mananatili ang variable na tumutugma sa salitang Y sa panloob na representasyon). Ang pangunahing paraan ng pakikipag-ugnayan ng user sa DSSP ay ang terminal, na karaniwang isang cathode-ray display na may keyboard. Mula sa terminal, ang paunang input, pag-edit at pag-debug ng mga programa, paghahanda ng data at lahat ng pamamahala ng system ay isinasagawa. Ang mga programa at data, pati na rin ang PRSP mismo, ay naka-imbak bilang mga file sa mga disk at maaaring i-print sa isang printer. Para sa kontrol ng input/output, kasama sa set ng mga pangunahing pamamaraan ng PRSP ang mga tool na inilarawan sa ibaba. Ang programming ng operasyon ng terminal ay ibinibigay ng mga utos para sa input at output ng mga numero, indibidwal na mga titik at pagkakasunud-sunod ng mga titik (mga string), pati na rin ang ilang karagdagang mga utos. Ang utos ng TIB (Terminal Input Byte) ay nagpapasimula ng waiting loop para sa isang keystroke sa keyboard ng terminal. Kapag pinindot ang isang key, ang 8-bit na code ng kaukulang character ay itutulak sa stack bilang mababang byte sa itaas, na may mga zero sa itaas na 3 byte. Ang isang kopya ng character na ipinasok sa ganitong paraan ay ipinapakita sa display. Mayroon ding utos ng TRB (Terminal Read Byte), na naiiba sa TIB dahil ang pagpapadala ng code ng inilagay na character sa stack ay hindi sinamahan ng pagpapakita ng character na ito sa display. Ang command na TIN (Terminal Input Number) ay nagpapasimula ng isang cycle ng input sa stack at ipinapakita sa display ng numerong na-type mula sa keyboard. Ang input number ay dapat na isang sequence ng mga digit na maaaring magsimula sa isang minus sign at magtatapos sa Ang bawat TIN command ay nagpasok ng isang numero. Kung kailangan mong magpasok ng isang pagkakasunud-sunod ng mga numero sa isang linya, dapat silang paghiwalayin sa pamamagitan ng pagpindot sa key Ang isang sequence na naglalaman ng n character na na-type mula sa keyboard ay ipinasok sa memorya ng computer sa anyo ng mga n byte na matatagpuan sa sunud-sunod na pagtaas ng mga address, simula sa address a, gamit ang TIS (Terminal Input String) na utos, bago kung saan ang address a at ang numero ng mga character n ay itinulak papunta sa stack . Hayaan, halimbawa, ang isang byte vector X na may sapat na haba ay ideklara. Kailangan mong magpasok ng 9 na mga character, na nagtatalaga ng kanilang mga halaga sa mga elemento ng vector na ito, simula sa zero na elemento: Katulad nito, gamit ang TOS command, ang output ng isang sequence ng n byte-liters na may panimulang address a ay tinukoy: Ang output sa terminal ng mga elemento ng teksto na direktang kasama sa programa ay ibinibigay ng konstruksiyon ."<текст>" Halimbawa, upang ang text na ENTER VARIANT NUMBER ay lumabas sa display kapag ang isang partikular na fragment ng program ay naisakatuparan, ang fragment ay dapat maglaman ng entry na "ENTER VARIANT NUMBER". Ang command na TON (Terminal Output Number) ay nagpapakita ng numerong ilalabas mula sa itaas ng stack, at ang haba ng output field ay dapat na tukuyin sa itaas. Ang numero ng output ay nakahanay sa kanang gilid ng field, ang mga walang laman na posisyon sa kaliwa ay puno ng mga puwang, at kung ang haba ng numero ay lumampas sa tinukoy na haba ng field, pagkatapos ay magkakaroon ng cutoff sa kaliwa. Sa decimal na I/O mode, ang mga negatibong numero ay nagsisimula sa isang minus sign. Ang TOB (terminal output byte) command ay nagpi-print ng character na ang code ay ibinibigay ng mababang byte ng tuktok ng stack. Ang lalim ng stack ay nababawasan ng 1. Mayroon ding mga command na direktang kumokontrol sa display cursor: CR - tumalon sa simula ng isang bagong linya, SP - espasyo, iyon ay, ilipat ang isang posisyon sa kanan. Ang utos ng BELL ay nagdudulot ng maikling beep ("kampana"). Minsan, kapag nakikipag-usap sa isang terminal, maaaring kailanganin upang suriin kung ang isang key ay pinindot na at kung ang display ay nakumpleto na ang nakaraang output command. Magagawa ito gamit ang mga utos ng TTI (Terminal Test Input) at TTO (Terminal Test Output), na nag-iiwan ng flag na 1 sa stack kung naganap ang tinukoy na kaganapan, at 0 kung hindi. Ang mga output command ng printer ay katulad ng mga terminal output command at nakabatay sa isang katulad na mnemonic kung saan ang mga letrang LP (Line Printer) ay pinalitan ng TO o idinagdag bilang mga nangungunang. Halimbawa, LPCR - paglipat sa simula ng isang bagong linya, LPSP - space, LPN - output ng isang numero mula sa subvertex sa field na tinukoy ng vertex, LPB - output ng isang character, LPS - output ng isang string ng mga character . Nariyan din ang [N] LPT command, na naglilipat sa print head sa N na posisyon ng naka-print na linya, at ang LPFF command, na nagpapakain sa sheet ng papel. Upang mag-print ng tahasang teksto, maginhawang gumamit ng literal na teksto at ang utos ng LPS, halimbawa: "FUNCTION VALUE TABLE" LPS Kapag nagprograma ng mga peripheral, nagiging kinakailangan upang mahawakan ang mga pagkagambala. Sa DSSP, ang pagpoproseso na ito ay nakaprograma bilang mga sumusunod. Ang program na idinisenyo upang mahawakan ang interrupt ay isang regular na pamamaraan ng PRSP, bago ang kahulugan kung saan mayroong prefix na INT, halimbawa INT: A !1+ I ; Tinitiyak ng prefix ng INT na ang estado ng processor ay nai-save kapag naantala at naibalik kapag nakumpleto ang pagkagambala. Ang LINK command ay ginagamit upang i-link ang isang routine sa isang partikular na interrupt: <адрес вектора>LINK<имя процедуры>sa panahon ng pagpapatupad kung saan, ayon sa kaukulang vector, ang isang tawag sa interrupt handling procedure ay naitala. Ang pagtuturo ng LINK ay maaaring magsagawa ng parehong static na pag-uugnay ng isang pamamaraan na may isang interrupt, na nangyayari sa oras ng pag-compile ng programa, at pabago-bago, kapag ang programa ay naisakatuparan. Ang processor interrupt ay ang paraan kung saan ang isang kaganapan na naganap sa labas ng mundo ay iniulat sa system. Ang mga kaganapan na nangangailangan ng agarang pagproseso ay maaari ding mangyari sa programa. Ang mga ito ay tinatawag na mga pambihirang sitwasyon. Mga halimbawa ng mga ganitong sitwasyon: paghahati sa zero, error sa komunikasyon sa device, dulo ng input file, atbp. Sa DSSP, ang mga pambihirang sitwasyon ay naayos gamit ang mga command interrupts. Ang isang command interrupt ay isang pinangalanang response procedure call operation at idineklara bilang sumusunod: BITAG<имя вызова> <конечная реакция> Halimbawa: BITAG S1 .Sitwasyon S1. Sa unang kaso, ang huling reaksyon sa interrupt S ay ang procedure X, sa pangalawang kaso, kapag nangyari ang interrupt S1, ang sumusunod na mensahe ay ipapakita sa terminal: Sitwasyon S1. Ang isang programa na malamang na magdulot ng pagkaantala ay maaaring magtakda ng tugon nito dito gamit ang isang catch instruction. Mayroong dalawang uri ng mga intercept sa PRSP: ON at EON. Magagamit lamang ang mga interception command sa loob ng mga procedure at may format na: NAKA-ON<имя прерывания> <реакция> eon<имя прерывания> <реакция>Halimbawa: : A ... ON S ."I-interrupt S" ... ; : A1 ... EON S1 ABC ... ; Ang ON at EON ay nagtatag ng iba't ibang uri ng mga reaksyon. Kung ang isang bagong reaksyon ay tinukoy ng ON na utos, pagkatapos ay kapag naganap ang isang pagkagambala, ang pamamaraan ng reaksyon ay isinasagawa, pagkatapos kung saan ang naantala na programa ay patuloy na tumatakbo. Kung ang reaksyon ay tinukoy ng utos ng EON, pagkatapos ay sa una ang operand stack ay tumatagal ng lalim na mayroon ito sa oras ng pagpapatupad ng EON, pagkatapos ay isasagawa ang reaksyon, at kapag ito ay natapos, ang pagpapatupad ng pamamaraan kung saan ang EON utos ay ginamit huminto kaagad. Isaalang-alang ang mga halimbawa. Ang Procedure M ay naglalagay ng mga character mula sa terminal keyboard at sinusuri kung ito ay isang digit. Kung ang ipinasok na character ay hindi isang digit, ang isang ND interrupt ay itataas. BITAG ND "Hindi isang numero." : M RP M1 ; : M1 TRB [B] C #0< C2 #9 >&0 KUNG+ ND [B] TOB ; Ang huling tugon sa ND interrupt ay ang mensahe: Hindi isang digit. Kung ang M ay tinawag mula sa isang P1 na pamamaraan na may sariling tugon sa isang ND interrupt: P1 ON ND PR1 M ; : PR1 [B] CR ."Error." D#0 [#0] ; pagkatapos ay kapag ang isang non-digit na character ay ipinasok, ang ND interrupt ay ipoproseso ng reaction program PR1 ng uri ON, na magiging sanhi ng mensahe na mailabas mula sa isang bagong linya: Error. Ang ipinasok na character ay papalitan ng character na 0, pagkatapos nito ay patuloy na gagana ang M. Kung M ay tinawag mula sa pamamaraan P2: P2 EON ND PR2 M ; : PR2 CR ."Error. End of entry." ; pagkatapos ay kapag ang isang non-digit na character ay ipinasok, ang ND interrupt ay ipoproseso ng PR2 reaction program ng uri ng EON, na magiging sanhi ng mensahe na mailabas mula sa isang bagong linya: Error. Katapusan ng input., pagkatapos ay lalabas ang P2. Ang operand stack ay magiging walang laman. Kung kinakailangan, ang interrupt ay maaaring i-activate muli sa reaction program, kaya pinapalawak ito sa mas mataas na antas ng mga programa. Sa kasong ito, alinman sa program na tinukoy sa intercept command sa nakapaloob na pamamaraan o ang panghuling reaksyon ang hahawak sa interrupt. Halimbawa, kung babaguhin mo ang PR2 bilang sumusunod: : PR2 CR . "Error. End of input." N.D.; pagkatapos ang mensaheng ipapakita sa terminal ay magiging: Error. Pagtatapos ng input. Hindi isang numero. Ang DSSP ay may ilang mga built-in na command interrupts, ang tugon na maaaring ibigay sa mga program ng user. TANONG:
Assalam alaikum yes! Doon ko napunta sa artikulong ito. Kung hindi ako nagkakamali, kabaligtaran ang sinulat mo. Kung hindi mahirap, maaari kang magkomento muli sa artikulong ito. Muslim. Arabic ang wika ng Koran. Napili siya sa lahat ng mga wika sa mundo, at mayroon siyang mga pambihirang katangian. Ang wikang ito ay wika rin ni Propeta Muhammad (sumakanya nawa ang kapayapaan at pagpapala). Ang wikang ito ay mayaman at walang sinuman sa mga wika sa mundo ang maaaring makipagkumpitensya dito. Ito ay may espirituwal at pisikal na impluwensya sa nagsasalita ng wikang ito. Ang mga Arabo noon ay nag-oorganisa ng mga patimpalak sa tula, ngunit nang matanggap ng Propeta (saws) ang Rebelasyon, ang mga Arabo ay labis na namangha sa napakagandang pagpapahayag ng wika, at kahit ang ilan ay nag-isip na ang Quran ay may mahiwagang impluwensya sa Tao. Kung nais ng isang tao na iwasto ang isang salita o titik mula sa Koran, ang buong pagkakaisa ng Banal na aklat ay masisira. Hindi dapat baguhin ang isang salita ng Qur'an, kung hindi ay magbabago ang kahulugan at ponetika. Alam namin na ang ilang mga salita ay may posibilidad na maging lipas na sa paglipas ng panahon, at hindi namin ginagamit ang mga ito. At ang wika ng Koran ay hindi nawala ang kaugnayan nito sa loob ng 1439 taon... Mahigit 10 taon na akong nagtuturo ng Quran at hanggang ngayon ay hindi ko pa nakikita ang isa sa aking mga estudyante na nagtanong sa akin ng tanong na: “Bakit tayo nag-aaral ng Quran? Saan ito nanggaling? Ano ang mga benepisyo nito? Ano ang kakaiba nito sa pagbabasa mula kaliwa hanggang kanan? Araw-araw, dumarami ang bilang ng mga nagnanais na matuto ng alpabetong Arabe at ang mga alituntunin ng tajuid, upang mamaya ay mabasa nila ang Koran mula sa orihinal. Ngunit kakaunti ang nag-iisip tungkol sa sagot sa mga tanong sa itaas. At sa wakas, kapag ipinaliwanag ko sa kanila ang tungkol sa mga pakinabang ng Koran, tungkol sa mga pakinabang nito, marami ang nagsimulang magsaliksik dito. Ang Arabic ay may 29 na titik. Ang mga tunog ay nabuo sa hangganan ng larynx, sa gitna ng larynx, dibdib, sa pagitan ng ugat ng dila at ng oral cavity. Ang mga tunog ng wikang Arabe ay "naglilinis" sa oral cavity at hindi gaanong madaling kapitan ng sakit. Ang Arabic ay isa ring mahusay na speech therapist. Nakapagpapagaling ito ng lisping at maling pagbigkas ng letrang "r". Nakakatulong din ang dila na ito sa mga may kapansanan sa paningin. Dahil ang pagbabasa ng isang Arabic text mula kaliwa hanggang kanan ay nagpapabuti sa visual apparatus ng isang tao at nakakarelax sa kanila. Ang hugis-itlog, bilog na hugis ng mga titik ay mayroon ding magandang epekto sa psyche. Ang lahat ng mga titik ng alpabetong Arabe ay mga katinig. Walang mga espesyal na titik para sa mga tunog ng patinig. Mayroong maikli at mahabang patinig. Ang mga maikling patinig ay ipinapadala sa pagsulat sa tulong ng mga patinig - superscript at subscript na mga character. Gayundin, sa 28 na letra, 22 na letra ang konektado sa magkabilang panig, at 6 na letra ang konektado lamang sa kanan. Ang Qur'an ay bumaba sa atin nang walang pagbaluktot sa loob ng 23 taon. Ang Qur'an ay ang huling Banal na aklat at wala nang iba pang mga aklat pagkatapos nito. Ito ay ipinadala sa buong sangkatauhan. Ang mga batas ng Quran ay mananatiling may bisa hanggang sa Araw ng Paghuhukom at hindi magbabago. Ang Quran ay isang walang hanggan, dakilang himala ng Makapangyarihan, na ibinigay kay Propeta Muhammad (sumakanya nawa ang kapayapaan). Ang pagbabasa ng Quran ay pagsamba. Pinapayuhan ko ang lahat na basahin ang walang katulad na kahanga-hangang aklat na ito araw-araw at alamin ang kahulugan nito. Magmadali upang matutong magbasa at makipag-usap sa iyong Tagapaglikha. Nawa'y bigyan tayo ng Allah na maging mga residente ng Jannat at magsalita ng wikang Arabic, na Siya mismo ang pumili. Dilyarom Bektaeva, ustaz ng Aktobe regional Central mosque "Nur Gasyr" http://nurgasyr.kz/index.php/ma-alar/1826-yazyk-zhitelej-dzhannata
SAGOT:
wa alaikum assalaam kapatid! Tulad niya, ang mga nasa bahay at ignorante na "mga huwad na Ustaze" ay dapat itaboy sa mga Muslim, upang hindi sila mailigaw. Dahil kumakalat ang mga ganitong kalokohan sa mosque ng Aktobe at pinapanatili ang mga ignorante na guro, marahil kaya napakaraming extremist sectarian sa lungsod na ito. Kahit sa Qur'an o sa Sunnah ay walang kahit isang malayong pahiwatig na ang wikang Arabe ang magiging karaniwang wika para sa lahat ng mga naninirahan sa Paraiso. Isipin mo kung paano makikipag-usap ang mga kinatawan ng ibang nasyonalidad sa isa't isa sa Paraiso kung hindi sila marunong ng Arabic?!! Naunang sumagot ng katulad na tanong: 1. Ito ay isang kuwento tungkol sa kung paano huminto ang mga tao sa pag-unawa sa isa't isa at maraming mga wika ng modernong mundo ang lumitaw. Gaano katanyag ang alamat na ito sa iba't ibang mga tao at ano ang mga interpretasyon nito? 2. Ang mitolohiya ng Tore ng Babel ay batay hindi lamang sa paniniwala na sa simula ang lahat ng sangkatauhan ay nagsasalita ng parehong wika, kundi pati na rin sa katotohanan na ang wikang ito ay "ideal": ang mga pangalan ng mga bagay ay naghahatid ng kanilang tunay na diwa. Ibinabahagi ba ng mga kinatawan ng ibang kultura ang mga pananaw na ito at isinasaalang-alang na ang kanilang wika ay pinakamalapit sa orihinal? Ang sagot sa unang tanong ay inaalok sa Genesis 11:1-9 ng Lumang Tipan, kung saan sinabi na nagpasya ang Diyos na parusahan ang sangkatauhan sa pamamagitan ng paglalagay dito ng sumpa ng kalituhan ng mga wika. Ang sagot sa pangalawang tanong ay makikita sa Genesis 2:19. Sa bahaging ito, dinala ng Diyos ang lahat ng hayop at ibon kay Adan upang marinig kung paano sila tatawagin ni Adan, at "kung paanong tinawag ng tao ang bawat buhay na nilalang, iyon ang pangalan nito." Ang isang impromptu cultural tour ay magbibigay-daan sa amin na makita kung paano sinasaklaw ang mga isyung ito. Tungkol sa una sa mga ito, marami ang sumasang-ayon sa Lumang Tipan: ang pagkakaiba-iba ng mga wika ay ang parusa ng Panginoon, o hindi bababa sa resulta ng ilang hindi kanais-nais na kadahilanan. Ang alamat ng isa sa mga tribo ng Australia ay nagsasabi tungkol sa pagkain ng mga matatanda. Ang mga tribo na kumain ng katawan mismo ay nagsasalita ng isang "dalisay" na wika, at ang mga kumakain ng mga laman-loob ay nagsasalita ng isang "marumi". Naniniwala ang African Kabiles na ang mga tao ay nagsimulang magsalita ng iba't ibang wika bilang resulta ng salungatan. Ayon sa isang tribo mula sa Assam, ang pagkalito ng mga wika ay dahil sa ang katunayan na ang tatlong bata ay nanghuli ng isang daga. Ang isa sa mga tribo ng Amazon ay naniniwala na hinati ng Diyos ang mga tao at ang kanilang mga wika upang sila ay maging mas masunurin sa Kanya. Kabilang sa mga katutubong populasyon ng Amerika, sa tribong Maidu (California), pinaniniwalaan na sa simula ang mga tao ay nagsasalita ng parehong wika, ngunit isang araw, sa seremonya ng libing, ang wika ay tumigil na maging isa. Naniniwala ang mga Iroquois na ang paghihiwalay ng mga wika ay dahil sa isang pag-aaway ng pamilya na nagresulta sa pagkamatay ng isang bata. Ngunit ang pag-aakala na ang multilinggwalismo ay isang sumpa ay hindi karaniwan sa tila. Mayroong maraming mga bersyon sa mundo ayon sa kung saan ang paghihiwalay ay naganap dahil sa mga natural na proseso. Binanggit ng sinaunang sagradong himno ng India na "Rigveda" na minsan ay mayroong isang Vak ("salita") at hinati ito ng mga diyos sa maraming anyo. Ang mga tao sa peninsula ng Indochinese ay nagsasabi ng anim na lahi, na ang bawat isa ay may sariling wika sa anyo ng isang tangkay, paikot-ikot mula sa isang lung. Ang tribong Quiche (Guatemala) ay may mito na ang mga tao ay namuhay nang magkakasama at nagsasalita ng parehong wika hanggang sa sila ay nahahati sa mga grupo. Ang bawat isa ay pumili ng isang diyos para sa kanyang sarili at nagsimulang magsalita ng kanyang sariling wika. Ang mito ng paglikha ng tribong Navajo sa Timog Amerika ay nagsasabi tungkol sa "Babae na Nagbabago" at ang paglitaw ng mga totoong tao na nagsasalita ng kanyang wika. Kaya, lumikha siya ng mga kalapit na tao - ang Pueblos, ang mga katutubo ng Mexico at iba pa, at nagsasalita sila ng kanilang sariling mga wika, na ikinakalat ang mga ito sa iba't ibang direksyon. Sa Islam, ang Qur'an ay nagtuturo na si Adan ay hindi nag-imbento ng mga pangalan o anumang bagay, ngunit itinuro ng Allah ang lahat. Ang pagkakaiba-iba ng mga wika ay ganap na natural at ito ay isang pagpapakita ng kapangyarihan ng Allah. Naiintindihan ng lahat ng tao ang mga kapahayagan ng Qur'an, sa anumang wikang isinulat ang mga ito. Ang sistemang mitolohiya ng maraming mga tao sa mundo ay walang paliwanag para sa kalituhan ng mga wika, na kung saan ay kinuha lamang para sa ipinagkaloob, at samakatuwid ay hindi makasagot sa aming tanong. Gayunpaman, sa halos lahat ng mga kultura ng mundo ay may pagbanggit ng "ideal" na wika (tanong 2). Sa itaas, binanggit namin ang tribo ng Australia, na naniniwala na ang ilang mga tao (nagpapakain sa katawan ng tao) ay nagsasalita ng isang "dalisay" na wika na naghahatid ng tunay na diwa ng mga bagay. Ayon sa mga sinaunang Egyptian, ang diyos na si Ptah ay nagbigay ng mga pangalan sa lahat, kaya ang wika ay naging regalo mula sa mga diyos. Sa Tsina, ang "tamang" wika ay itinuro ng mga mythical emperors. Itinuturing ng Qur'an ang pagkakaiba-iba ng mga wika bilang paghahati ng isang wika na kinabibilangan ng lahat ng iba pa. Saanman sinisikap ng mga tao na maunawaan kung paano ipinapakita ng pangalan ng paksa ang kakanyahan nito. Ipinapalagay na ang "ideal" na wika na naglalarawan sa tunay na diwa ng paksa ay umiiral ngayon, o ito ay nanatili sa nakaraan. Ang pangalawang palagay ay nagsisilbing paunang kinakailangan para sa paghahanap ng katotohanan at pagkakaisa sa mundo. Tila ang mga ideya tungkol sa koneksyon ng wika sa totoong mundo at pagkakaroon ng tao ay nakapaloob sa ating isipan. Kaugnay nito, bumangon ang tanong, na unang binigkas sa diyalogo ni Plato na "Cratylus" at mula noon ay naging paksa ng patuloy na debate: natural ba ang koneksyon sa pagitan ng pangalan at layuning esensya ng mga bagay (nagmumula sa subjective na kamalayan ng isang katutubong speaker) o ang koneksyon na ito ay may kondisyon at hindi sinasadya? Ang Disyembre 18 ay World Arabic Language Day. Ang holiday ay itinatag ng United Nations noong 2010 at isa sa anim na opisyal na wika ng UN. Ayon sa pinakahuling datos, mayroong 300 milyong tao sa mundo ang nagsasalita ng Arabic at ang mga diyalekto nito. Bukod dito, para sa 240 milyon ito ay katutubong. Ang wikang Arabe at ang relihiyon ng Islam ay hindi mapaghihiwalay. Ang isa ay hindi maiisip kung wala ang isa, dahil, sa loob ng isang milenyo at kalahati, ang mga Muslim sa mundo ay nagbabasa ng mga panalangin sa Arabic ng limang beses sa isang araw. Ang Banal na Quran ay ipinadala dito, at ang Propeta Muhammad (sumakanya nawa ang kapayapaan) ay nagsalita. Ipinagdiwang ng klero ng Grozny ang makabuluhang petsa sa kanilang sariling paraan. Ang Imam ng Heart of Chechnya Mosque, Magomed Dadakhaev, ay nagsalita sa mga residente ng lungsod. Ipinaliwanag niya ang papel ng wikang Arabe sa buhay ng isang Muslim: Kung hindi alam ang wikang Arabe, hindi matututo ng Islam ang isang tao. Samakatuwid, sa mga Muslim, ang wikang ito ay lubos na iginagalang mula pa noong unang panahon. Ang isang kinakailangang kondisyon para sa pag-aaral ng relihiyon ng Propeta (sumakanya nawa ang kapayapaan) ay ang pagsusuri ng mga tekstong Arabe, halos lahat ng mga ito ay isinulat nang matagal na ang nakalipas. Mayroong higit sa 12 milyong mga salita sa modernong Arabic (para sa paghahambing, mayroong 131,000 sa kanila sa Russian, at halos isang milyon sa Ingles ...). Ito ay isang napakayaman at masalimuot na wika. Noong nag-aral ako sa isang unibersidad ng Islam sa Syria, ang aming guro, isang philologist, ay nagbigay sa amin ng halimbawang ito: sa Arabic, ang bilang ng mga kasingkahulugan para sa isang salitang "kamelyo" ay umaabot sa anim na libo! Napakakomplikado at multifaceted din ng grammar nito. Ang pag-aaral nito ay nangangailangan ng isang makatarungang halaga ng intelektwal at boluntaryong pagsisikap. Samakatuwid, sa mga interpreter ng Koran at mga Hadith ng Propeta (sumakanya nawa ang kapayapaan), walang mga baguhan. Halos imposibleng maunawaan ang kahulugan ng sagradong teksto nang walang solidong Arabic lexicon at kaalaman sa syntax, semantics, at phonetics ng wikang ito. Minsan may mga taong tinatawag ang kanilang sarili na mga dalubhasa sa Koran. Sumipi sila mula sa Mensahe ng Makapangyarihan, nagbibigay ng payo sa mga tao. Ngunit kung tatanungin mo sila tungkol sa pinagmulan ng kaalaman, makukuha mo ang sagot: "Binasa ko ang pagsasalin." Ang ganitong mga tao ay lubhang mapanganib para sa Islam, dahil, sa hindi nila nalalaman kung ano ang kanilang ginagawa, maaari silang magdulot ng kalituhan at mga kamalian sa pagpapakahulugan ng mensahe ng Makapangyarihan sa lahat. Sa mga institusyong pang-edukasyon ng Islam, ang sumusunod na pamamaraan ng pagtuturo ay malawakang ginagawa: sa loob ng ilang taon, ang mga elementarya ay nag-aaral ng eksklusibong Arabic philology. At lamang, na pinagkadalubhasaan ang kinakailangang dami ng materyal sa isang sapat na lawak, nakakakuha sila ng access sa pag-aaral ng mga teksto ng Koran. Kaya, ang wikang Arabe ay isang uri ng pambuwelo sa pag-master ng impormasyon tungkol sa Islam. Bilang karagdagan, ang Arabic ay ang wikang sasalitain ng mga naninirahan sa Paraiso. Purihin ang Allah sa ginawa niyang Muslim! Ano ang nagbigay sa amin ng maganda, mayamang wikang Arabe upang maunawaan ang aming kalooban! Sa mga paaralan, upang pag-aralan ang mga pangunahing kaalaman ng algorithmization, ang tinatawag na. wika ng algorithm ng paaralan (pang-edukasyon na algorithmic na wika), gamit ang mga salitang naiintindihan ng mag-aaral sa Russian. Hindi tulad ng karamihan sa mga programming language, ang isang algorithmic na wika ay hindi nakatali sa arkitektura ng isang computer, hindi naglalaman ng mga detalye na nauugnay sa device ng isang makina. Ang algorithm sa algorithmic na wika sa mga pangkalahatang termino ay nakasulat sa form: Sa pagsulat ng algorithm, ang mga keyword ay karaniwang nakasalungguhit o naka-highlight sa bold. Ang mga indent ay ginamit upang i-highlight ang mga lohikal na bloke, at ang mga pares na salita ng simula at dulo ng bloke ay ikinonekta ng isang patayong bar. Isang halimbawa ng pagkalkula ng kabuuan ng mga parisukat: Upang mapalakas ang teoretikal na pag-aaral ng programming sa isang algorithmic na wika, noong 1985, ang mga espesyalista mula sa Mekhmat ng Moscow State University ay lumikha ng isang editor-compiler. "E-workshop"("E" - bilang parangal kay Ershov), na nagpapahintulot sa iyo na ipasok, i-edit at isagawa ang mga programa sa isang algorithmic na wika. Noong 1986, isang hanay ng mga mundo ng pagsasanay (mga performer) ay inilabas para sa "E-practice": "Robot", "Drafter", "Two-legged", "All-terrain vehicle", na nagbibigay-daan sa iyo na ipakilala ang mga konsepto. ng algorithm. Ang "E-workshop" ay ipinatupad sa mga computer: Yamaha, Corvette, UKNC at malawakang ginagamit. Ang programming language na ito ay patuloy na napabuti at ang isang paglalarawan ng isang susunod na bersyon ng "E-workshop" ay lumitaw sa isang 1990 textbook. Ang programming system na "KuMir" ("Set of Educational Worlds"), na sumusuporta sa aklat-aralin na ito, ay inilabas ng InfoMir enterprise noong 1990. Ang wika ng sistemang ito ay tinatawag ding "KuMir". Noong 1995, ang "KuMir" ay inirerekomenda ng Ministri ng Edukasyon ng Russian Federation bilang pangunahing materyal na pang-edukasyon para sa kursong "Mga Fundamental ng Informatics at Computer Engineering" batay sa aklat-aralin ni A. G. Kushnirenko, G. V. Lebedev at R. A. Svorenya. . Gayunpaman, dapat tandaan na ang algorithmic na wika, sa kawalan ng mga detalye na direktang nag-uugnay nito sa arkitektura ng computer, gayunpaman, bilang isang wikang tulad ng Algolo, ay tahasang nagtuturo sa mga mag-aaral na umasa sa von Neumann na arkitektura ng mga makina. (Ang arkitektura ng Von Neumann ay isang praktikal na pagpapatupad ng isang naunang ideya na tinatawag na Turing Machine. Bilang karagdagan sa ideya ni Turing, may iba pang mga ideya. Ang pinakasikat sa kanila ay tinatawag na Lambda Calculus: Alonzo Church ang nagtrabaho dito. Lisp Machine ay isang arkitektura na batay sa Lambda - calculus.) Wikimedia Foundation. 2010 . Ang algorithmic na wika ay isang pormal na wika na ginagamit sa pagsulat, pagpapatupad, o pag-aaral ng mga algorithm. Ang bawat programming language ay isang algorithmic na wika, ngunit hindi lahat ng algorithmic na wika ay angkop para gamitin bilang isang wika ... ... Wikipedia Ang terminong ito ay may iba pang kahulugan, tingnan ang Dragon (mga kahulugan). Isang halimbawa ng block diagram ng algorithm sa DRAKON language dragon ng DRAKON scheme (Friendly Russian Algorithmic Language That Provides Visibility) visual ... ... Wikipedia Ang terminong ito ay may ibang kahulugan, tingnan ang wikang Algorithmic. Ang pag-aaral ng algorithmic na wika ay isang pormal na wika na ginagamit upang magsulat, magpatupad, at matuto ng mga algorithm. Hindi tulad ng karamihan sa mga programming language, hindi ito nakatali sa ... Wikipedia Algorithmic language (din ang Russian algorithmic language, RAYA) ay isang programming language na ginagamit upang magsulat at mag-aral ng mga algorithm. Kapag nag-aaral ng computer science sa mga paaralan, upang pag-aralan ang mga pangunahing kaalaman ng algorithmization, ang tinatawag na. paaralan algorithmic ... ... Wikipedia Ang educational programming language ay isang programming language na idinisenyo upang magturo ng programming sa mga espesyalista. Ang ganitong wika ay dapat matugunan ang pangunahing pangangailangan: pagiging simple. Kung mas simple ito, mas mabilis na makabisado ito ng isang baguhan. Ang mga posibilidad ng naturang ... ... Wikipedia Isang halimbawa ng block diagram ng isang algorithm sa DRAKON language dragon diagram DRAKON (Friendly Russian Algorithmic Language That Provides Visibility) ay isang visual algorithmic language na nilikha bilang bahagi ng Buran space program. Pag-unlad ng wikang ito ... WikipediaPinangalanang Data
Paggawa gamit ang memorya sa pamamagitan ng mga pisikal na address
Karagdagang Data at Memory Operations
Mga Utos sa Kontrol ng Processor
Mga utos sa pamamahala ng diksyunaryo
Mga Utos ng I/O
Interrupt at Exception Handling
Mga halimbawa
E-workshop
Pagpuna
Mga link
Tingnan kung ano ang "Russian algorithmic language" sa iba pang mga diksyunaryo: