Структурно програмирање. Руски алгоритамски јазик

18 декември е Светски ден на арапскиот јазик. Празникот е воспоставен од Обединетите нации во 2010 година и е еден од шесте официјални јазици на ОН. Според последните податоци, во светот има 300 милиони луѓе кои зборуваат арапски и неговите дијалекти. Згора на тоа, за 240 милиони луѓе тој е роден. Арапскиот јазик и религијата на исламот се нераскинливо поврзани. Едното е незамисливо без другото, бидејќи веќе еден и пол милениум муслиманите во светот читаат молитви на арапски пет пати на ден. На него беше објавен Чесниот Куран, а пророкот Мухамед (мир над него) зборуваше.

Свештенството од Грозни на свој начин го прослави значајниот датум. Пред жителите на градот се обрати имамот на џамијата „Срцето на Чеченија“, Магомед Дадахаев. Тој ја објасни улогата на арапскиот јазик во животот на еден муслиман:

Без да зборува арапски, човек не може да го разбере исламот. Затоа, овој јазик бил многу почитуван меѓу муслиманите од памтивек. Неопходен услов за проучување на религијата на Пратеникот (мир над него) е анализата на арапските текстови, од кои речиси сите се напишани многу одамна. На современиот арапски има повеќе од 12 милиони зборови (за споредба, на руски има 131.000, а на англиски околу милион...). Тоа е многу богат и сложен јазик. Кога студирав на исламски универзитет во Сирија, нашиот учител, филолог, ни го даде следниот пример: на арапски, бројот на синоними за само еден збор „камила“ достигнува шест илјади! Нејзината граматика е исто така многу сложена и повеќеслојна. Неговото проучување бара прилично интелектуален и волен напор. Затоа, меѓу толкувачите на Куранот и хадисот на пророкот (мир над него), нема аматери. Речиси е невозможно да се разбере значењето на светиот текст без солиден арапски речник и познавање на синтаксата, семантиката и фонетиката на овој јазик. Понекогаш сретнувате луѓе кои себеси се нарекуваат експерти за Куранот. Тие цитираат од Пораката на Семоќниот и им даваат совети на луѓето. Но, ако ги прашате за изворот на знаење, ќе добиете одговор: „Го прочитав преводот“. Таквите луѓе се многу опасни за исламот, бидејќи, без да знаат што прават, тие се способни да внесат конфузија и неточности во толкувањето на пораката на Семоќниот. Следната наставна методологија е широко практикувана во исламските образовни институции: неколку години, основците учат исклучиво арапска филологија. И дури откако доволно ќе го совладаат потребниот обем на материјал, добиваат пристап до проучувањето на текстовите на Куранот. Така, арапскиот јазик е еден вид отскочна даска за совладување на информации за исламот. Згора на тоа, арапскиот е јазикот на кој ќе зборуваат жителите на Рајот. Слава на Аллах што нè создаде нас муслиманите! Што ни даде убавиот, богат арапски јазик за да ја сфатиме нашата волја!

1. Ова е приказна за тоа како луѓето престанаа да се разбираат и се појавија бројни јазици на современиот свет. Колку е популарен овој мит меѓу различните народи и кои се неговите толкувања?

2. Митот за Вавилонската кула се заснова не само на верувањето дека на почетокот целото човештво зборувало на ист јазик, туку и на фактот дека овој јазик бил „идеален“: имињата на предметите ја пренесувале нивната вистинска суштина. Дали претставниците на другите култури ги делат овие ставови и дали веруваат дека нивниот јазик е најблизок до оригиналот?

Одговорот на првото прашање е понуден во Стариот Завет Книга Битие 11:1-9, која кажува дека Бог одлучил да го казни човечкиот род ставајќи го на него проклетството на конфузија на јазиците. Одговорот на второто прашање може да се најде во Битие 2:19. Во овој дел, Бог ги донел сите животни и птици кај Адам за да чуе како ќе ги нарече Адам, и „како и да ја нарекува човекот секоја жива душа, тоа е нејзиното име“. Импровизираната обиколка на различни култури ќе ни овозможи да видиме како се покриени овие прашања. Во однос на првиот од нив, многумина се согласуваат со Стариот завет: разновидноста на јазиците е казна од Господа или, барем, последица на некој неповолен фактор.

Легендата за едно од австралиските племиња раскажува за јадење стари луѓе. Племињата што го јаделе самото тело зборувале „чист“ јазик, а оние што јаделе внатрешни органи зборувале „нечист“ јазик. Африканските кабили веруваат дека луѓето почнале да зборуваат различни јазици како резултат на конфликтот. Според едно племе од Асам, конфузијата на јазиците се должи на фактот дека три деца еднаш ловеле стаорец. Едно од амазонските племиња е на мислење дека Бог ги одвоил луѓето и нивните јазици за да му станат попослушни. Меѓу домородното население на Америка, племето Мајду (Калифорнија), се верува дека на почетокот луѓето зборувале на ист јазик, но еден ден, на погребна церемонија, јазикот престанал да биде униформен. Ирокезите веруваат дека раздвојувањето на јазиците било поради семејна расправија во која било убиено дете. Но, претпоставката дека повеќејазичните јазици се проклетство не е толку распространета како што изгледа. Во светот постојат многу верзии според кои поделбата настанала како резултат на природни процеси.

Древната индиска света химна „Риг Веда“ споменува дека некогаш постоел Вак („збор“) и боговите го делеле на многу форми. Народите на полуостровот Индокина раскажуваат за шест раси, од кои секоја имала свој јазик во форма на стебло што се искачува од тиква. Племето Киче (Гватемала) има мит дека луѓето живееле заедно и зборувале на ист јазик додека не се поделат во групи. Секој си избра бог и почна да зборува на свој јазик.

Јужноамериканскиот мит за создавање на Навахо раскажува за „Жената што се менува“ и за појавата на вистински народи кои зборувале на нејзиниот јазик. Така, таа ги создаде соседните народи - Пуеблос, мексиканските абориџини и други, а тие зборуваа на нивните јазици, ширејќи ги во различни насоки. Во исламот, Куранот учи дека Адам не измислувал имиња или нешто друго, туку дека Аллах го научил сè. Разновидноста на јазиците е апсолутно природна и е манифестација на моќта на Алах. Сите луѓе се способни да ги разберат објавите на Куранот, без разлика на кој јазик се напишани.

Митолошкиот систем на многу народи во светот нема објаснување за конфузијата на јазиците, што едноставно се зема здраво за готово, и затоа не може да одговори на нашето прашање. Сепак, во речиси сите култури во светот се споменува „идеален“ јазик (прашање 2). Погоре споменавме австралиско племе кое верува дека некои луѓе (кои се хранат со човечкото тело) зборуваат „чист“ јазик што ја пренесува вистинската суштина на нештата. Според старите Египќани, богот Птах давал имиња на сè, така што јазикот станал подарок од боговите. Во Кина, „точниот“ јазик го учеле митските императори. Куранот ја гледа различноста на јазиците како поделби на еден јазик кој ги вклучува сите други.

Секаде луѓето се обидуваат да разберат како името на објектот ја открива неговата суштина. Се претпоставува дека или денес постои „идеален“ јазик кој ја опишува вистинската суштина на темата или е минато. Втората претпоставка служи како предуслов за потрага по вистината и хармонијата во светот. Се чини дека идеите за поврзаноста на јазикот со реалниот свет и човечкото постоење се вградени во нашата свест. Во врска со ова, се поставува прашањето, за првпат изразено во дијалогот на Платон „Кратилус“ и кое оттогаш е предмет на постојана дебата: дали е природна врската помеѓу името и објективната суштина на нештата (кои произлегуваат во субјективната свест на мајчиниот говорител. ) или оваа врска е условна и случајна?

Во раните 80-ти на 20 век, во утробата на проблематичната лабораторија на електронски компјутери на Московскиот државен универзитет. М.В.Ломоносов започна да работи на необичен, според денешни стандарди, јазик, поточно систем, па дури и идеологија на програмирање.

ДССП

Резултатот беше DSSP - систем за дијалог за структурирано програмирање.

DSSP беше дизајниран да го намали интензитетот на трудот, да ја зголеми доверливоста и да го направи програмирањето широко достапно со систематско воведување на дисциплината на структурирано програмирање во комбинација со режим на разговор и неконвенционална системска архитектура заснована на стекови, вокабулар и процедурален код.

Основата на DSSP е стек процесор емулиран на компјутери со внимателно развиени алатки за конструирање на структурирани програми (DSSP процесор).

Прототипот на овој процесор беше експерименталната тројна дигитална машина „Setun 70“ создадена во PNIL COMPUTER на Московскиот државен универзитет во доцните 60-ти.

Контролата на дијалогот на процесорот DSSP се врши на надворешен (симболичен) јазик со помош на речник и компајлер сличен на системот FORTH, но со можност за компајлирање процедури во опаѓачка секвенца и отстранување на непотребните записи во речник.

РАЈА

Основниот јазик на DSSP - Evolving Adaptive Language (DAL) е јазик на ниско ниво во смисла дека прикажува објекти типични за асемблерскиот јазик (битови, бајти, машински зборови и елементарни операции на нив). RAYA се разликува од традиционалниот асемблерски јазик по неговата постфиксна синтакса, строга контролна дисциплина и присуството на ефективни средства за надополнување и развој на јазикот. Така, DSSP е алтернатива на системите за програмирање на склопување, што има голем број важни предности:
  • леснотија на учење,
  • значително зголемување на продуктивноста на програмерите и квалитетот на креираните програми, развој,
  • приспособливост,
  • мобилност.

Примери

F1 - пресметува 3*X*X-4*X+2
: F1 [X] C 3 * 4 - * 2 + ;

Користење на F1
* 25 Ф1. D VK 1777 година
* -9 Ф1. D VK 281

F2 - пресметува A2*X*X-A1*X+A0
: F2 C E4 E3 * + * + ;

Користење на F2
* 1 2 3 4 F2 . D VK 57
* 1 2 -3 4 F2 . Д ВК -39

FG - фактор N, ако N>0, инаку 0
: FG [N] C BR+ FCT T0 ;
: FCT [N] C 1- C DO P D ;
: P E2 C2 * E2 1- ;

Користење на FG
* -5 FG. D VK 0
*5 FG. D VK 120

GCD - најголем заеднички делител на природните броеви M,N
: GCD RP CD D [GCD] ;
[ЦД - од дивиденда и делител до делител и остаток]
: CD [делител, делител] E2 C2 / [делител, количник, остаток] E2 D [делител, остаток] C EX0 ;

Користење на GCD
* 48 72 GCD. D VK 24
* 225.650 NOD. D VK 25

ДИЈАЛОГ: прашање - одговори - резиме
Б8
: ДИЈАЛОГ ПРАШАЊЕ ОДГОВОРИ - РЕЗИМЕ ;
: ПРАШАЊЕ CR „Како имате намера да користите DSSP?
1. За пресметки
2. За контрола
3. За обработка на текст“ ;
: ОДГОВОРИ-РЕЗИМЕ RP AR ;
: AR CR.“ Наведете го бројот на одговорот - „TIB BR #1 R1 #2 R2 #3 R3 ALSE R4;
: R1 CR "DSSP не е пресметковно ориентиран" EX ;
: R2 CR „Вие сте на вистинскиот пат“ EX ;
: R3 CR "DSSP ќе ви помогне!" EX ;
: R4 CR "Таков одговор не е обезбеден" ;
Б10

Користење на DIALOG
* ДИЈАЛОГ
Како имате намера да користите DSSP?
1. За пресметки
2. За контрола
3. За обработка на текст
Наведете го одговорот број - 7
Овој одговор не е даден
Наведете го одговорот број - 3
DSSP ќе ви помогне!

Имплементации

  • Компјутери и платформи: Intel 80x86, MC68020, R3000, VAX, PDP-11, INTEL 8080, SparcSUN.
  • Оперативни системи: MSDOS, MSDOS-продолжувачи, UNIX, RT-11, RSX, OS9, CPM

Наместо заклучок

За жал, во моментов, развојот на јазикот официјално е запрен, најновите вести датираат од 2002 година.

Сепак, секој може да се обиде во структурираното програмирање:

  1. git клон git://github.com/ingeniarius/DSSP-32.git
  2. следете ги упатствата од INSTALL
Склопувањето на системот ќе потрае само неколку минути... Уживајте!

Есаламу алејкум ве рохматулахи ве баракатуху!
„Арапскиот е јазик на жителите на Рајот!“ (приближно значење)
Драги браќа, ве замолувам да го разјасните прашањето во врска со овој хадис, дали е сигурен? Во принцип, дали овие зборови се зборови на пророкот Мухамед, алејхи селам?
БаракАлаху фикум ве џазакумулаху хаир!

Ве алејкум селам ве рахматулахи ве баракатух!

Ет-Табарани во ал-Аусат, од зборовите на Абу Хураира, пренесува:
„Аллаховиот Пратеник, с.а.в.с., рече: „Јас сум Арап, Куранот е на арапски, а јазикот на рајските живеалишта ќе биде арапски.

Шеикот ал-Албани го донесе кај Силсила ал-Даифа број 161, велејќи:

„Овој хадис е фиктивен (меуду). Во реалноста, не постои ниту еден веродостоен хадис кој објаснува на кој јазик ќе зборуваат жителите на Рајот, па затоа е неопходно да се молчи и да не се потопува во разговори за ова прашање, препуштајќи му го знаењето за тоа на Семоќниот Аллах и да се вклучи само во што ќе доведе до извршување на оние дела кои ќе донесат корист во другиот свет!
Шеих-ул-Ислам Ибн Тејмија, нека Аллах го смилува, беше прашан: „На кој јазик ќе зборуваат луѓето на Денот на Воскресението? Дали Семоќниот Алах ќе им се обраќа на луѓето на арапски? И дали е вистина дека јазикот на жителите на пеколот е персиски, а на жителите на рајот е арапски?
На што тој одговорил: „Флала му е на Аллах, Господарот на световите! Не се знае на кој јазик ќе зборуваат луѓето на тој ден, како што не се знае на кој јазик ќе им зборува нивниот Господ, голем и славен. Ниту Семоќниот Аллах ниту неговиот Пратеник, с.а.в.с., не ни кажаа ништо за ова, а исто така не е веродостојно дека јазикот на жителите на пеколот ќе биде персиски, а јазикот на жителите на рајот ќе биде арапски. И не знаеме дека по оваа работа имало некакво несогласување меѓу асхабите, Аллах да биде задоволен од нив. Напротив, тие се воздржаа од тоа бидејќи зборувањето за тоа е бескорисно. Сепак, меѓу следните генерации се појавија несогласувања во врска со ова прашање. Некои рекоа дека ќе комуницираат на арапски, други рекоа дека тоа не важи за жителите на пеколот, бидејќи тие ќе одговараат на персиски и ова е нивниот јазик во пеколот. Третиот е дека луѓето ќе комуницираат на асирски, бидејќи ова е јазикот на Адам, од кој потекнуваат сите други јазици. Четврто - дека тоа не важи за жителите на Рајот, бидејќи тие ќе комуницираат на арапски. Сепак, ниту еден од нив нема докази за да ги поткрепи нивните зборови, ниту од разум, ниту од шеријатски извори, туку тоа се само изјави ослободени од какви било докази. Семоќниот Аллах знае подобро!“ Види Меџмуул Фатава 4/299.

Развивање на адаптивен јазик RAYA на системот за интерактивно програмирање DSSP Московски државен универзитет Факултет за компјутерска математика и кибернетика Н.П.Брусенцов, В.Б.Захаров, И.А.Руднев, С.А.Сидоров, Н.А.Чанишев Москва, 1987 г.

Општ опис на јазикот на РАЈОТ

Цел и цел на развојот на јазикот

RAYA (Еволуционен адаптивен јазик) е основниот јазик на системот за структурно програмирање DSSP за дијалог. Основно значи дека тој е основата за сите понатамошни конструкции што се вршат во DSSP преку развивање (проширување, зајакнување) на основниот јазик и, можеби, прилагодување на јазичните средства создадени на одредена апликација. За разлика од таканаречените јазици на високо ниво, PAYA не обезбедува готови типови на податоци и операции, туку само елементи и примитиви за ефикасно дефинирање на потребните типови. На пример, оригиналните формати на податоци се 8-битен бајт, 16-битен збор и 32-битен долг збор, интерпретирани во зависност од операциите извршени на нив како цели броеви, Булови вектори, кодови на знаци, булови, податоци и покажувачи на процедури. Во овој случај, можно е, од една страна, да се манипулира со поединечни битови од бајти и зборови, а од друга страна, да се формираат композитни податочни единици (зборови со повеќе должини, вектори, низи, линии на текст итн.) , поставувајќи за нив едно или друго толкување воведување на соодветни операции. Така, може да се воведат реални броеви од потребната должина и опсег на вредности, сложени броеви и други објекти, а верзијата на јазикот фокусирана на дадена апликација ќе вклучува објекти и алатки карактеристични за оваа апликација и нема да вклучува ништо што не се однесуваат на него, - јазикот ќе се прилагоди (адаптира) за употреба. Развојот на DSSP беше насочен кон создавање на широко достапна и ефикасна алатка за програмирање на микрокомпјутер, т.е. компјутери изградени на микропроцесори. Суштинска карактеристика на архитектурата на микропроцесорите е елементарната природа на типовите и операциите на податоци, што значи, од една страна, универзалност, а од друга страна, трудоинтензивно програмирање. Поради нивната разновидност, микропроцесорите и микрокомпјутерите создадени на нивна основа имаат потенцијално неограничени можности за примена. Сепак, практичната имплементација на овие способности е ограничена првенствено од сложеноста на развојот на потребните апликативни програми. Освен тоа, задоволителни апликативни програми може да се креираат само со длабоко и суптилно познавање на спецификите на релевантните апликации, т.е. Тие треба да бидат развиени не само од програмери, туку од високо квалификувани специјалисти во одредена област. Затоа, програмскиот систем не само што во голема мера треба да ја зголеми продуктивноста на работата на програмерите, туку и да биде толку едноставен што може да го совладаат и ефективно да го користат непрофесионални програмери.

Радикално решение за овој проблем се чини дека е значително поедноставување на компјутерската архитектура. Но, за жал, архитектурата на микрокомпјутерите се развива во дијаметрално спротивна насока - по патот на зголемената сложеност и софистицираност, така што на професионалниот програмер не му е лесно денес совршено да го совлада јазикот за склопување на микрокомпјутерот. Системските програмски јазици како што се C или PL/M го намалија интензитетот на трудот на развојот на програмата до одреден степен (иако далеку од доволен), но тешко дека може да им се препорачаат на луѓе кои немаат искуство во програмирање. Широко достапен јазик, се разбира, треба да биде поедноставен и поприроден и треба да се базира на, колку што е можно, секојдневни, познати идеи за суштината и техниката на програмирање.

Покрај пристапноста и значителното намалување на интензитетот на трудот на развојот на програмата во споредба со програмирањето на асемблерски јазик, од DSSP се бараше да има универзалност на јазикот, иста како онаа на асемблерскиот јазик, висока машинска ефикасност (т.е. компактност и брзина на кодот ), доверливост на проверливоста на креираните програми и нивна одржливост и модификација, како и мобилност (преносливост) на системот и програмите развиени во него на машини со различна архитектура.

Процедурално програмирање

Програмирањето на РАЈСКИ јазик е сосема слично на таквите широко распространети видови човечка активност како планирање и организирање меѓусебно поврзани дејства, работи, процеси или дизајнирање сложени материјални објекти - машини, единици, структури. Како дизајнер кој ја реализира својата идеја со собирање на неговите составни делови (блокови, склопови, делови), програмерот ги синтетизира потребните сложени дејства од едноставни дејства обезбедени од јазикот. Можеме да кажеме и дека програмирањето (дизајнот) се состои од постепено распаѓање (распаѓање) на објектот што се спроведува на помали и помали компоненти.

На јазикот на РАЈОТ, главната „конструкција“ е постапка - именувана акција. Јазикот се заснова на ограничен сет на едноставни процедури (примитиви), претставени со нивните сопствени имиња (нотации). На пример: + значи „додади“, NEG значи „знак за промена“, VCTR значи „создај вектор“. Конкретно, постојат примитиви: и; (запирка и запирка) што ви овозможува да воведете нова постапка, на пример, со името P, дефинирајќи ја како низа од постапки P1, P2, ..., PN во форма

: P P1 P2 ... PN ;

Ако постапката P го претставува дејството што креираната програма треба да го изврши, конструкцијата на оваа програма со користење на јазичните средства PAYA се сведува на секвенцијално детализирање на процедурите P1, P2, ..., PN. Ова значи дека секоја од овие постапки мора да биде дефинирана со низа помали постапки, кои потоа се дефинираат со низи од уште помали процедури и така натаму, додека не се добијат дефиниции кои се состојат само од примитиви.

Овој тип на конструкција на програма, почнувајќи од дадена цел и постепено разградувајќи ги процедурите што се користат до ниво на основни јазични алатки, е познат како програмирање одозгора надолу. Тоа е главниот начин да се добијат програми на јазикот PARA за решавање на индивидуални, добро дефинирани проблеми. Спротивното е програмирањето одоздола нагоре - конструкцијата, заснована на основните средства на системскиот јазик, на постепено зголемени процедури фокусирани на одредена проблематична област. На овој начин јазикот се развива и приспособува на одредена апликација.

Во двата случаи, внимателното структурирање на креираните програми е од суштинско значење: секоја програма и секој дел од програмата мора да се состои од мал број посебни делови, од кои секој извршува одредена функција и овозможува автономна верификација. Што се однесува до јазикот ПАРА, тоа особено значи дека дефинициите на процедурата треба да бидат кратки: дефинирачката низа, по правило, не треба да содржи повеќе од 5-7 термини. Структурирањето осигурува дека програмата е разбирлива, проверлива и модифицирана и значително ја намалува сложеноста на нејзиното создавање и одржување.

Горенаведениот пример дефиниција на постапката P е поедноставена. Всушност, дефинирачката низа може да содржи како членови не само имиња на процедури, туку и изјави (наредби) кои се состојат од повеќе од еден збор. Името на процедурата, кога се користи надвор од комбинација со други зборови, е команда за извршување на процедурата одредена од неа. Редоследот на имиња на процедурата одредува дека овие постапки се извршуваат по редоследот по кој нивните имиња се појавуваат еден по друг (по линеарен редослед). За да наведете други секвенци на извршување, RAYA обезбедува специјални зборови (префикси) кои го пропишуваат извршувањето на процедурите именувани во комбинација со нив, во зависност од наведената состојба, како и повторено (циклично) извршување на постапката.

На пример, линеарната низа P0 P1 предизвикува да се изврши постапката P0, а потоа да се изврши постапката P1. Ако постапката P1 не треба секогаш да се извршува, туку само под услов да се добие позитивен број како резултат на извршување на P0, тогаш наместо P1, напишете ја командата за извршување според условот: IF+ P1, т.е. наместо P0 P1 ќе има P0 IF+ P1. RAYA вклучува збир на условни префикси кои ви овозможуваат ефективно да го изразите извршувањето по услов, како и избор од две, три или повеќе процедури.

Повтореното извршување на процедурата се одредува со користење на префиксот RP. Така, командата RP P предизвикува извршување на постапката P одново и одново додека не се создадат услови под кои се активира EX содржан во телото на оваа постапка - излегување од циклусот, по што се извршува следната команда по линеарен редослед. Условот за излез од јамката може да биде, на пример, еднаквоста на некоја променлива X на нула, што се изразува како:

Во неа се вели дека е вгнездена постапка чие име е вклучено во дефиницијата за друга постапка. Вгнездена постапка, ако не е примитивна, може да содржи вгнездени процедури, т.е. гнездење може да биде повеќекратно. Дополнително, правилата на јазикот RAY не забрануваат вклучување во дефиницијата на постапка со свое име или име на постапка што го содржи ова име, т.е. RAYA дозволува рекурзија.

Повторно извршена постапка може да се вгнезди и во повеќекратно извршена процедура. Во овој случај, се случува вгнездување на јамка. PARA овозможува повеќекратно вгнездување на јамки.

Линеарна низа на команди, вгнездување, условно и циклично вгнездување на процедури - ова ги исцрпува можностите за конструирање програми на јазикот PARA. Недостатокот, хомогеноста и природноста на овие средства е клучот за лесното совладување и користење на јазикот. Во исто време, тој е строг структуриран програмски јазик, кој обезбедува значително намалување на интензитетот на трудот во развојот и доверливоста на програмата.

Процедури и податоци

Сè што е кажано досега е карактеристика на јазикот ПАРА како средство за пропишување дејства, конструирање произволни дејства од конечен сет на примитивни операции. Другата страна на јазикот се состои од средства за претставување на објекти на кои се вршат дејствија - средства за претставување и организирање податоци.

Исклучително едноставен податочен елемент е елемент со две вредности - малку. Сите други формати и типови на податоци се изградени од битови. Во јазикот RAYA, основните формати се 8-битен бајт, 16-битен збор и 32-битен долг збор. Во зависност од операциите извршени врз нив, бајтите, зборовите и долгите зборови дозволуваат многу толкувања, т.е. може да послужи како основа за различни видови податоци. Покрај тоа, тие се почетни елементи за формирање на композитни формати и типови.

Всушност, RAYA не содржи ниту едноставни ниту композитни типови на податоци - постојат само основни формати (бајт, збор, долг збор) и алатки за конструирање композитни формати од нив: вектори и повеќедимензионални низи. Во овој случај, истите бајти (зборови, долги зборови), во зависност од операциите извршени врз нив, се толкуваат како вектори на битови, или како потпишани и неозначени бинарни цели броеви, или како знаци на влезно/излезна азбука итн. Типовите на податоци и нивните поврзани ограничувања и проверки може да се воведат во екстензии на јазикот специфични за проблемот.

Во основниот јазик, декларацијата на имињата на податоците ја врши само функцијата на обезбедување пристап до податоците по име: името е поврзано со бројот на мемориски ќелии што ги бара декларацијата и механизмот за пристап до нив. Операциите за тестирање и трансформација не се применуваат директно на именуваните податоци. Овие операции се дефинирани на оџакот на операндот, кој е низа од 32-битни долги зборови (елементи на магацинот) која динамички се модифицира со додавање (туркање) нови елементи на крајот од него, како и отстранување на елементи од истиот крај ( пукање од магацинот). Ставките се отстрануваат по обратен редослед по кој се испратени: прво се отстранува последното испратено. Податоците што треба да се тестираат или конвертираат се испраќаат до оџакот, каде што се вршат пропишаните операции на него, по што резултатите од обработката може да се отстранат од оџакот.

На пример, ако има променлива X декларирана како 32-битен долг збор, тогаш директно на неа може да се извршат само две операции:

1) туркање на неговата вредност на оџакот, што се случува автоматски секогаш кога ќе се спомене името X,

2) доделување на тимот! X е вредноста на последниот (горниот) елемент отстранет од оџакот.

Ако, да речеме, сакате да ја удвоите вредноста на X со додавање на себе, тогаш можете да го направите ова со извршување на следните команди една по друга:

Две копии од вредноста X ќе се втурнат на оџакот, потоа командата + ќе ги отстрани, ќе ги додаде и ќе ја турне добиената количина на стекот, по што командата! X ќе ја земе оваа сума и ќе ја додели својата вредност на променливата X.

Вообичаеното снимање на горенаведениот пример во форма X:=X+X за јазици на високо ниво е попознато за програмерот, но тоа не е директен одраз на низата команди извршени од процесорот, туку е вид на математичка формула. Ова е погодно кога се програмираат пресметковни задачи, меѓутоа, во основниот јазик, недвосмислената кореспонденција со командите што се извршуваат изгледа поважна, бидејќи проверката на програмата од команда по команда може да се направи директно на програмскиот јазик и нема потреба да се знаат јазик различен од јазикот на процесорот.

Но, особено важна придобивка од обработката на наредени податоци е тоа што процедурите за тестирање и трансформација може да се дефинираат и имплементираат независно од податоците на кои се применуваат. Операциите за тестирање и конверзија не се формулирани во однос на идентификаторите на податоци (или имиња на константи и променливи, формални параметри), туку во однос на елементите на магацинот, на кои мора да им се доделат вредности на операндот до моментот кога операцијата ќе се изврши. На пример, операцијата за собирање два броја, изведена со помош на командата + (додај), се состои од преземање на горните два елементи (теме и подвертекс) од стекот како собирачи, пресметување на нивниот збир и туркање на оџакот. За да додадете два броја, треба да ги турнете нивните вредности на оџакот и да ја извршите командата +, резултатот ќе биде на врвот на оџакот.

Процедурата за тест-трансформација со произволен број на влезни и излезни параметри може да се дефинира на овој начин едноставно како именувано дејство (без листа на параметри) извршено на стек што ги содржи вредностите на аргументите, распоредени по пропишан редослед и, по извршување, вредностите на резултатот. За да примените таква постапка на одреден сет на специфични податоци, мора да ги турнете овие податоци во соодветната секвенца на оџакот. Откако ќе ги потрошите, постапката ќе ги остави своите резултати на оџакот (исто така лоциран во одредена секвенца).

Со други зборови, имињата на процедурите во јазикот RAY се користат на ист начин како знаците за операции и во суштина се симболи на операции со произволен број на операнди. Во согласност со принципот на работа на стекот, операциите се пишуваат во постфикс форма, т.е. името на операцијата се става по имињата или вредностите на нејзините операнди. На пример, ако операцијата за добивање на збир од три броја ја означиме со симболот ++, тогаш збирот на броевите A, 5 и B ќе се изрази на следниов начин:

Би било можно да се воспостават формални правила на постфикс јазик и да се води според нив при пишување програми, но полесно и посигурно е човекот да се занимава не со правилата, туку со моделот на процесорот на стек, т.е. со модел на машината за која се креираат програми и која ќе ги извршува. Во случајот со јазикот PARA, таква машина е DSSP процесор - збир на опрема и програми кои ги спроведуваат дејствата пропишани на овој јазик.

DSSP процесор

Физички, DSSP процесорот може да се имплементира во форма на микропроцесор со едноставна и ефикасно програмабилна архитектура која би овозможила на најдобар можен начин решавање на проблемот со софтверската опрема за микрокомпјутери. Но, таков микропроцесор сè уште не е создаден и неговата архитектура треба да се емулира на постоечките микрокомпјутери со цел да се подобри нивната програмабилност. Се разбира, емулацијата е поврзана со трошоците - бара меморија и компјутерско време, но во случај на емулирање на DSSP процесор, овие трошоци се релативно мали.

Од гледна точка на програмер, карактеристика на процесорот е неговата архитектура, т.е. информации за тоа што е даден процесор како алатка за обработка на податоци, какви се можностите за прикажување податоци на влезот и внатре во процесорот, какви операции за тестирање и конверзија на податоци се достапни, како е организирана сопствената меморија на процесорот, како и пристап до главна и надворешна меморија, кои се контролните алатки текот на програмата, интеракција со надворешното опкружување, одговор на исклучителни настани итн. Мајсторството на архитектурата е неопходен услов за значајно (неформално) програмирање, што значително го намалува бројот на грешки и ја зголемува веродостојноста на програмите.

Централната врска на DSSP процесорот е веќе споменатиот операнд оџак. Всушност, обработката се врши на стекот и, по правило, податоците се испраќаат преку стекот. Поединечни команди и кратки секвенци на команди на стекот може да се извршат со нивно предавање до влезот на процесорот директно од терминалната тастатура. Во овој случај, DSSP процесорот симулира работа на постфикс калкулатор. Броевите и оперативните мнемонички кодови внесени од тастатурата се одделени со празни места. Внесениот текст се појавува како линија на екранот на терминалот. Сигналот за крај на влезот и командата до процесорот „Изврши ја внесената нарачка“ е притискање на копче , исто така означено , . Броевите кои пристигнуваат на влезот на процесорот се зачувуваат на стекот, а командите се извршуваат на стекот. Резултатот од пресметката добиен на врвот на оџакот може да се копира на екранот на терминалот со командата. (точка).

На пример, за да го оцените изразот (2-5)*3 и да го прикажете добиениот резултат, внесете:

2 5 - 3 * .

По притискање на копчето процесорот го произведува резултатот, така што целата линија ќе изгледа како

* 2 5 - 3 * . -90

Ѕвездичка на почетокот на линијата ја издава процесорот како сигнал дека чека влез.

Во разгледуваниот пример, процесорот ги воочи и обработи влезните броеви како децимални цели броеви. Во реалноста, при внесување, овие броеви беа претворени во бинарен комплемент код, а кога излегуваа, тие беа конвертирани назад во децимален систем. Процесорот DSSP овозможува и бинарни, октални и хексадецимални режими на влез/излез. За да се префрлите на саканиот режим, мора да извршите една од командите B2, B8, B10, B16, соодветно.

Притискањето на копчињата предизвикува шифри да се испратат до влезот на процесорот, што ги претставува знаците наведени на овие копчиња (букви, бројки, интерпункциски знаци, оперативни симболи). Редоследот на внесените знаци формира влезна низа - синџир од бајти што содржи кодови на знаци, по еден бајт по знак. Максималната должина на влезната низа е 80 литри.

При обработката на влезната низа, процесорот изолира зборови во неа - комбинации на знаци одделени едни од други со празни места и ги толкува. Ако зборот што се обработува е име на операција (процедура) или податок што му е познат на процесорот, тогаш процесорот ги извршува дејствата што ова име треба да ги нарекува по дефиниција. Ако зборот не му е познат на процесорот, тогаш тој се обидува да го протолкува како број, земајќи го предвид поставениот режим на влез/излез.

Броевите се зборови што се состојат од цифри прифатливи во даден броен систем и, можеби, содржат знак минус како прва буква. Во хексадецимален I/O режим, важечките букви, заедно со броевите, ги вклучуваат и латинските букви A, B, C, D, E, F. 32-битен долг збор. Покрај тоа, ако вредноста на бројот е надвор од опсегот на застапливи вредности -2147483648: 2147483647, тогаш таа се заменува со вредност споредлив модул 2**32 од овој опсег.

Во случај кога зборот што се обработува не му е познат на процесорот и не може да се прифати како број, процесорот ја прикажува пораката на терминалниот екран: „Не знам“<обрабатываемое слово>“ и чека да се внесат дополнителни инструкции.

Внесувањето на податоците во форма на произволен текст (низа од бајти-буквални) се прави во форма на текстуални буквали, кои се текст затворен во двојни наводници, на пример: „Текст буквално“. Пристигнувањето на буквален текст на влезот на процесорот предизвикува текстот затворен помеѓу наводниците да се запише во главната меморија во форма на синџир од бајти-литерали. Во овој случај, адресата на првиот бајт и бројот на бајти (должина на текстот) се туркаат на оџакот. Текст буквално на кој му претходи точка процесорот го перцепира како команда за „прикажување на текстот помеѓу наводниците на терминалниот екран“. На пример, испраќањето на комбинацијата на знаци „Нема меморија“ на влезот на процесорот ќе предизвика пораката да се појави на екранот: Нема меморија.

Кодот на поединечен знак се турка на оџакот како низок бајт на темето кога овој знак се прима на влезот на процесорот заедно со знакот # на кој му претходи. На пример, комбинацијата на знаци #L ќе го испрати кодот на буквата L на оџакот, комбинацијата на знаци #5 ќе го испрати кодот на бројот 5. Командата TOB за излез на бајт на терминалот ја прикажува буквата чиј код е содржани во нискиот бајт на врвот на стекот.

Дури и во режимот на директно извршување на команди, процесорот DSSP далеку ги надминува можностите на конвенционалниот калкулатор, обезбедувајќи му на корисникот, покрај операциите за обработка на податоци, средства за декларирање именувани податоци и дефинирање процедури кои потоа може да се користат заедно со основни операции. Декларирањето на имињата на податоците и дефинирањето на процедурите се врши со помош на специјални команди.

На пример, за да креирате 16-битна променлива со име, да речеме, TEMP, треба да напишете на тастатурата и да го примените клучот на влезот на процесорот тим

ВАР ТЕМП

Заедно со декларацијата, можете да доделите почетна вредност на променливата, на пример, 0:

ВАР ТЕМПА 0! ТЕМП

Сега доаѓањето на името TEMP на влезот на процесорот ќе предизвика тековната вредност на оваа променлива да се турка на магацинот, а доделувањето на нова вредност отстранета од стекот може да се направи со командата! ТЕМП.

Дефиниција на процедурата се внесува со командата: (запирка), која го содржи името на постапката што се дефинира и дефинирачки синџир на команди со буква; (запирка) како краен знак на дефиницијата. Дозволете ни да ја демонстрираме дефиницијата и употребата на постапките користејќи го примерот за пресметување на факторот на природен број N со помош на формулата

N!=N*(N-1)*(N-2)*...*2*1, т.е. Множење N-1.

За да се добие посакуваниот резултат, постапката FCT мора да го помножи дадениот број N со сукцесивно намалување на броевите, почнувајќи од N-1 до 1, т.е. само N-1 пати. Во јазикот PARA, ова се програмира со извршување на процедурата P t пати: DO P, каде што P е името на постапката, t е моменталната вредност на врвот на стекот, што покажува колку пати треба да се изврши постапката P.

Да претпоставиме дека пред да се примени процедурата FCT, бројот N се турка на оџакот и се наоѓа на нејзиниот врв. За да ја направиме постапката поразбирлива, да го замислиме модифицираниот множител на променливата K:

Ја воведуваме дефиницијата на процедурата FCT во форма:

FCT [N] ! K K K 1- DO F. [N] ;

Коментарите се дадени во квадратни загради, како одраз на моменталната состојба на оџакот на операндот. Тим! К, кој ја започнува дефинираната постапка, ја доделува вредноста на бројот N земен од оџакот на променливата K. Потоа K се турка на оџакот двапати и со одземање 1 на врвот на стекот, бројот на извршување на повторените се формира постапка F, еднаква на N-1. Следува командата DO F, која одредува јамка, по чие завршување горниот дел од стекот ќе ја содржи саканата вредност на факторот - N!. Тим. (точка) печати копија од оваа вредност на екранот на терминалот. Останува да се дефинира постапка F која ја менува вредноста на K со одземање 1 и го множи делумниот резултат од пресметката R содржана на оџакот со K:

F [R] K 1- ! K[R]K*;

Исправноста на двете постапки се проверува со извршување на командата за нивните дефиниции по команда, прикажувајќи ја содржината на стекот на операндот и вредноста на променливата K на екранот на терминалот по секоја команда. По завршувањето на постапката FCT, горниот дел од стекот мора да ја содржи вредноста N!, а вредноста на променливата K мора да биде еднаква на 1.

Потврдени и коригирани (ако се идентификувани грешки за време на процесот на верификација) процедурите се тестираат со примена на поединечни вредности на бројот N. Бидејќи постапката F е вградена во FCT, нејзиното тестирање се врши автоматски за време на процесот на тестирање на вториот . Треба да се има на ум дека вредностите на резултатот не треба да го надминуваат максималниот позитивен број претставен во комплементарниот код за двајца како 32-битен долг збор: 2147483647, т.е. FCT произведува точни резултати само за N=1, ..., 13.

Користењето на FCT не се разликува од користењето на упатствата на самиот процесор: за да го добиете резултатот, треба да ја поставите вредноста на операндот и да го внесете името на постапката:

5 FCT 120

7 FCT 5040

Горенаведената имплементација на процедурата FCT бараше воведување на помошна променлива K, но функционално еквивалентна процедура може да се спроведе без помошна променлива, користејќи операција C, која турка копија од нејзиниот врв на оџакот, и операциите E2 и E3, кои го заменуваат врвот со вториот и третиот елемент од стекот, соодветно. Дефиницијата на оваа постапка е како што следува.

: FCTA [N] C 1- C DO FA D. ;

: FA C E3 * E2 1- ;

Предноста на таквата процедура „чисто стек“ е што е целосно автономна: исто како и основните операции на магацинот на процесорот, се изведува само на стекот на операндот, без да се бара друга меморија или да се предизвикуваат какви било промени на другите компоненти на процесорот.

Имињата на дефинираните процедури и декларираните податоци се внесуваат во речникот на процесорот, со што се воспоставува врска помеѓу овие имиња и именуваните објекти, односно со телата на процедурата лоцирани во главната меморија и со елементите од оваа меморија наменети за складирање на декларирани податоци. Кога го обработува следниот збор од влезниот тек, процесорот гледа низ речникот и, откако најде соодветен збор во него, ги извршува дејствата поврзани со овој збор. Доколку пребарувањето е неуспешно, тогаш, како што веќе споменавме, се прави обид нумерички да се интерпретира дадениот збор, а ако тоа не успее, тогаш се појавува порака дека зборот не му е познат на процесорот.

Како резултат на составување на дефиниција за процедура, во речникот се внесуваат името на оваа постапка и покажувачот (адресата) на нејзиното тело, што е низа од покажувачи на процедури и податоци што ја сочинуваат дефиницијата. Со други зборови, внатрешното претставување на телото на една постапка се добива со замена на имињата на постапките и податоците во нејзината дефиниција со покажувачи на соодветните тела, кои пак се исти низи од покажувачи, а во случај на примитивци, синџири на машински команди. Ова внатрешно претставување на програмски процедурален код го нарекуваме.

Кога, заедно со компајлирањето на дефиницијата за процедурата P, се компајлираат и дефинициите на сите вгнездени процедури претходно непознати за процесорот, се формира целосна хиерархија на покажувачи, што овозможува извршување на постапката P со испраќање само на нејзиното име до влезот на процесорот. . Во исто време, нема смисла да се зачувуваат имињата на вгнездените процедури составени во врска со дефиницијата на P, доколку нема потреба да се пристапува до овие процедури одделно. Во голем број случаи, се покажува дека е препорачливо да се затвори пристапот до еден или друг дел од речникот, оставајќи ја, можеби, можноста да се извршат само некои процедури.

За да се задоволат таквите барања, речникот се имплементира како збир на подречници, преку кои се дефинирани операции кои овозможуваат создавање и уништување на подречници и нивни делови, бришење имиња, затворање и отворање пристап до одредени подречници. Секој подречник има име што се користи во командите поврзани со него. Имињата на подречник мора да започнуваат со буквата $, на пример: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.

Подречник $PRIME, кој го содржи основниот сет на зборови DSSP, по стартувањето на процесорот, е отворен и за пристап до зборовите што ги содржи и за додавање нови зборови. Новите зборови внесени во него, доколку е потребно, може да се избришат заедно со телата поврзани со нив со помош на командата ЗАБОРАВИ $PRIME. По ова, можноста за понатамошно внесување зборови во овој подречник се обезбедува со извршување на командата GROW $PRIME, која овозможува повторно да се прошири подречникот $PRIME и се што е внесено во него може повторно да се избрише со командата ЗАБОРАВИ $PRIME итн. . Во овој режим, DSSP се користи при експериментирање со мали фрагменти од програми, поединечни примери, проценки, а исто така, доколку е потребно, вклучување нови зборови во подречник $PRIME според редоследот на развојот на системскиот јазик.

Во случај да се создаде посебна програма, тие создаваат свој под-речник за неа, а тоа се постигнува со започнување на програмскиот текст со командата

ПРОГРАМА$<имя программы>

Едно лице ја перцепира оваа команда како наслов, по кој треба да следи коментар во квадратни загради, опишувајќи ја со неколку зборови функцијата што ја спроведува програмата. За процесорот тоа е еквивалентно на низа наредби

ЗАБОРАВИ $<имя>РАСТЕ $<имя>

Затоа, секое пристигнување на текстот на програмата на влезот на процесорот ќе предизвика бришење на неговата претходна верзија и ќе го отвори подречникот, на тој начин исчистен, за внесување нова верзија на програмата што го носи истото име. Ова е погодно кога правите корекции на програмата што се креира, како и кога ја менувате во иднина.

Текстот на програмата што се конструира не се внесува во влезот на процесорот директно од тастатурата, туку се генерира во баферот на уредувачот на текст. Командата E (Уреди) го поставува режимот на уредување, во кој зборовите напишани на тастатурата процесорот повеќе не ги перцепира како команди што треба веднаш да се извршат, туку едноставно се текст запишан во бафер и истовремено се прикажуваат на екранот. Со помош на специјални копчиња кои го контролираат движењето на индикаторот за моментална положба (курсорот) низ екранот, како и уредување наредби дадени со притискање на други копчиња, внесениот текст може да се коригира и менува, правејќи бришења и вметнувања, преместувајќи ги неговите фрагменти од место до место итн.

По завршувањето на внесувањето и уредувањето на текстот, уредникот се исклучува со притискање на копчето E истовремено со (или подобро, со претходно притиснато) копче. , и системот оди во главниот режим на командите DSSP. Слична акција е предизвикана со едноставно притискање на копче . Во овој режим, содржината на баферот на уредувачот може да се пренесе на влезот на процесорот со командата PF (PerForm - execute). Во овој случај, сите команди содржани во текстот ќе бидат извршени, особено командата PROGRAM $<имя>ќе го избрише $ внесен во подречник<имя>од последниот пат кога оваа команда беше извршена, имињата на податоците и процедурите, како и соодветните тела, повторно го отвора овој подречник за раст. Наредбите за декларација на податоци и дефинирање на процедури ќе ги внесат имињата што ги внесуваат, заедно со покажувачите на податоците означени со тие имиња и телата на постапката составени според дефинициите.

Откако ќе заврши вчитувањето, процедурите и податоците се достапни за повикување според нивните имиња на тастатурата, а исправноста на програмата може да се потврди со извршување на процедурите во растечки редослед, т.е. почнувајќи од оние чии дефиниции не содржат непроверени постапки. Пред да започнете со проверка, соодветно е да се уверите дека програмата не користи недефинирани имиња. Процесорот ги прикажува на екранот користејќи ја командата UNDEF. За да го дополните текстот на програмата со дефиниции за овие имиња, како и да ги поправите другите грешки откриени за време на процесот на проверка, треба да ја користите командата E за да го повикате уредникот и да направите соодветна модификација на текстот на изворната програма што се наоѓа во баферот на уредувачот. , а потоа префрлете го процесорот во главниот режим и вчитајте ја содржината на баферот со командата PF.

По проверка и тестирање на програмата, нејзиниот изворен текст може да се копира од баферот на уредникот на дискот со помош на командата OE f, каде што f е името на датотеката во која програмата ќе биде запишана на дискот. Во иднина, содржината на датотеката може да се вчита на влезот на процесорот со командата LOAD f, а исто така да се копира во баферот на уредникот како додаток на текстот во него со помош на командата IE f. Стандардно, датотеките имаат наставка .DSP. Баферот може да се исчисти прво со командата KE. Исто така, можно е да се испечати содржината на баферот со помош на командата LPE.

Откако ќе се вчита програма подготвена за извршување, можно е да се исчисти подречникот создаден за него $<имя>CLEAR $ команда<имя>. Со извршување на оваа команда, процесорот ги отстранува нефиксираните имиња од именуваниот подречник, т.е. сите имиња, освен оние чии дефиниции се пред фиксирачки префикс:: (две две точки). Во овој случај, само самите имиња (записи во речник) се бришат, а телата на постапката и податоците поврзани со нив се зачувуваат и се достапни за време на извршувањето на програмата преку внатрешни врски воспоставени при компилацијата, но тие повеќе не се достапни однадвор. За да ја вратите можноста за пристап однадвор, на пример, ако треба да составите некое дополнување или промена, треба повторно да го преземете изворниот код на програмата.

Имињата може да се направат надворешно недостапни без да се отстранат од речникот со помош на командата SHUT $<имя>, што го блокира пристапот до сите зборови од подречник именуван во него. Отворањето на подречник за користење на неговите зборови се врши со командата USE $<имя>. Постои и команда ONLY $<имя>, кој ги затвора сите подречник освен именуваниот и командата CANCEL, која го откажува ова ограничување. Наведените команди ви дозволуваат да ја контролирате употребата на речникот за време на компилацијата и да го ограничите множеството имиња што му се достапни на корисникот на програмата на потребниот минимум.

Пребарувањето име во речникот се врши со барање на неговите зборови во обратен редослед од редоследот по кој се внесени во речникот, т.е. почнувајќи од последното внесено. Затоа, за име дефинирано повеќе од еднаш во речникот, ќе важи најновата дефиниција. Ако подречникот што ја содржи оваа последна дефиниција е затворен, тогаш пребарувањето продолжува до првиот достапен запис во речник со даденото име и ќе се користи дефиницијата означена со тој запис.

Неколку зборови за внесување и излез на податоци. Како што веќе беше споменато, процесорот се обидува да протолкува збор од извршната програма што не се наоѓа во речникот како број и, доколку е успешен, го турка бинарниот еквивалент на овој број на стекот. Внесувањето број на стек може да се направи со командата TIN, која бара внесување на влезниот број на тастатурата. Исто така, постојат наредби кои предизвикуваат знакот внесен од тастатурата да се турка на оџакот: TIB - со дисплеј, TRB - без прикажување на овој знак на екранот. Во овој случај, шифрата на знаците е претставена со низок бајт на 32-битен збор вметнат на оџакот, од кои највисоките 3 бајти се еднакви на нула.

Содржината на горниот дел од оџакот може да се внесе соодветно како број или како буква. Командата TON предизвикува прикажување на нумеричката вредност на подвертексот на екранот во полето за излез, чија ширина е одредена со темето, во системот за претставување на броеви воспоставен во моментот на неговото извршување. Командата TOB го прикажува знакот чиј код е содржан во нискиот бајт на горниот дел од стекот. Во двата случаи, излезот е придружен со отстранување на аргументите од стекот.

DSSP процесорот има апарат за надворешни и внатрешни (командни) прекини и ги обезбедува следните средства за нивна обработка. Постапката наменета за справување со надворешен прекин е дефинирана на ист начин како и нормална процедура, но со префиксот INT додаден пред дебелото црево. Името на таквата постапка е поврзано со адресата на векторот на прекин со командата:

<адрес вектора>ЛИНК<имя процедуры>

Командниот прекин е именувана операција која повикува постапка за одговор. Името на оваа операција се одредува со командата TRAP, која со неа ја поврзува таканаречената процедура за финален одговор, која се извршува доколку конечниот одговор не се замени со друга процедура за одговор со помош на командата ON или EON. Сите три команди имаат ист формат:

СТАПИЦА<имя вызова> <процедура реагирования>

НА<имя вызова> <процедура реагирования>

ЕОН<имя вызова> <процедура реагирования>

Постапката поврзана со името на повикот од страна на инструкцијата EON се извршува со прелиминарен излез од телото на процедурата што ја содржи инструкцијата EON и со вредноста на покажувачот на стекот на операндот што постоел во моментот кога бил извршен EON.

Синтакса на јазикот RAYA

Азбуката на јазикот RAY вклучува латински и руски, мали и големи букви, децимални броеви, математички и други специјални знаци. Елементите (членовите) на азбуката се нарекуваат букви. Надворешното претставување на буквата е нејзината испечатена слика (отпечатен знак). Внатре во процесорот DSSP, секој отпечатен знак е претставен со бајт, чија вредност е бинарниот код на овој знак. Конверзијата на надворешното претставување во внатрешно и обратно се врши со влезно/излезен уред (тастатура, дисплеј, печатач). За погодност, нумеричката вредност на кодот се изразува во децимални, хексадецимални или октални системи, нарекувајќи го соодветниот број децимална, хексадецимална или октална шифра.

Сите објекти на јазикот RAYA се конструирани од знаци и претставуваат линеарни синџири на знаци со конечна должина, наречени зборови. Раздвојувачот на зборовите што следат еден по друг е знак (простор) што не може да се печати. Низа празни места е еквивалентна на еден простор. Покрај тоа, функцијата на сепаратор на зборови се изведува со командата „Оди на почетокот на следната линија“, означена на тастатурите на влезните уреди со симболот или и, заедно со буквите, има внатрешна претстава како бајт код. Така, нема потреба од одвојување простори на почетокот и крајот на линијата.

Пример зборови: CLEAR NOP STACK2 & 1+ -366 X сонда.

Процесорот DSSP ги разликува зборовите по првите седум букви, препознавајќи ги со политерална споредба со зборовите во неговиот речник. Речникот содржи зборови кои се имиња (ознаки) на операциите на самиот процесор, наречени основни операции или примитиви, и може да се надополнат со имиња на објекти (податоци, процедури) дефинирани од корисникот. Така, зборовите содржани во речникот се или имиња на дејства (операции, процедури) или имиња на податоци (константи, променливи, низи).

Кога зборот што може да се идентификува не е во речникот, процесорот се обидува да го додели на еден од следниве случаи:

    нумеричка буквална, т.е. низа од броеви, можеби почнувајќи со знак минус, на пример: 0, 4096, -25;

    буквално буквално: збор што започнува со знакот #, што предизвикува процесорот да го добие веднаш следниот буквално како даден код, на пример: #A - буквална од големата латинска буква А, #5 - буквална од бројот 5, # - буквално на просторот, ## - буквални букви #;

    текст буквално: произволен текст затворен во двојни наводници и разделен со разграничувачи на зборови, на пример: „Текст“, „Влезна датотека N3“;

    команда за прикажување на текстуална порака: текстот на прикажаната порака, ограничен лево со комбинацијата на знаци точка-двоен цитат и двоен цитат оддесно и разделен со разграничувачи на зборови, на пример: „Оџакот е празен“;

    коментар: произволен текст затворен во квадратни загради и разделен со разграничувачи, на пример: .

Литералите и командата за прикажување порака на екранот делуваат како објекти на јазикот DSSP заедно со зборовите идентификувани од речникот, додека коментарите се целосно игнорирани од процесорот DSSP - тие се наменети за личност, а не за машина. Ако зборот не се најде во речникот и не е поврзан со наведените конструкции, процесорот ја прикажува пораката: „Не знам<неопознанное слово>".

Поради посебното значење прикачено на буквите #, „и комбинацијата“. на почетокот на зборот, т.е. по сепараторот, како и буквата „ пред сепараторот, не треба да се користат во наведените позиции во зборовите дефинирани за вклучување во речникот.

Редоследот на зборови на влезот на процесорот се толкува како низа од инструкции извршени од процесорот. Постојат три вида зборови:

1) врши самостојно, т.е. претставување наредби со еден збор (еднозборови);

2) извршено во врска со еден или повеќе наредни зборови, т.е. се почетни зборови (префикси) на команди со два, три или повеќе зборови;

3) претходи на команда како појаснување или индикација за посебен режим на извршување (префикси).

Монозборовите вклучуваат буквали, имиња на податоци, повеќето I/O операции, тестирање и конверзија на податоци на оџакот и процедури дефинирани од корисникот. На пример: 1987 година - нумеричка буквална, #5 - буквална на бројот 5, „Список на шеми“ - буквален текст, LENGTH - име на променлива, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Префиксите се својствени за командите за опишување податоци и дефинирање процедури, како и за манипулирање со именувани податоци, условно и повторено извршување на процедурите и за управување со речник. Примери на команди со префикси:

VAR SUM - креирајте променлива SUM,

: НЕД [x] 1 & ; - креирајте непарна процедура која заменува непарен број со 1, парен број со 0,

0 X - доделете ја вредноста 0 на променливата X,

BR+ P1 P2 - ако вредноста на нејзиниот врв земен од оџакот е позитивна, тогаш извршете P1, инаку извршете P2,

RP CHECK - извршете ја постапката CHECK повторно и повторно,

КОРИСТЕТЕ $REAL - отворете го подречник $REAL за употреба.

Вообичаено, одреден префикс бара одреден број зборови по него. Значи, во штотуку дадените примери, префиксите VAR, !0 и USE бараат по еден збор, а префиксот BR+ бара два збора. Сепак, префиксот: (запирка) ви овозможува да креирате команда со која било должина, почнувајќи со три збора. Крајот на командата е зборот; (запирка). Произволна должина е карактеристична и за командата на константен дескриптор CNST A1... AJ; и процедурата команда за повеќекратен избор BR A1 P1 ... AJ PJ ALSE PN.

Префиксите се специјални зборови кои, кога се додаваат на предната страна на командата, ја менуваат нејзината содржина или дефинираат посебен режим на извршување. На пример, командата VAR X без префикс е инструкција за создавање 16-битна променлива X. Ако на неа го прикачите префиксот BYTE, ја добивате командата BYTE VAR X, која ве наложува да креирате 8-битна променлива (бајт) со име X. Ако користите LONG префикс, тогаш добиваме LONG VAR X - инструкција за создавање на 32-битна променлива со име X.

Префиксот од друг тип, имено:: (две запирки) го прави резултатот од командата отпорен на процедурата CLEAR, која ги отстранува слободните зборови од речникот. Имињата внесени во речникот за време на конструкцијата на програмата со наредбите за опис на податоци и дефинирање на процедурата може да се отстранат од речникот откако програмата ќе биде креирана и тестирана, со исклучок на неколку кои се неопходни за одржување на готовата програма. Отстранувањето се врши со командата CLEAR $<имя подсловаря>, кој упатува да се исчисти подречникот поврзан со програмата, задржувајќи ги во него само оние зборови чии дефиниции го содржат префиксот ::. Примери на команди кои генерираат зборови што не се бришат:

:: BYTE CNST LITCODE # #0 #A ;

:: : MOD / [int(a,b),res(a,b)] E2 D [res(a,b)] ;

Како што покажува вториот пример, кој ги содржи префиксите :: и BYTE, командата може да има повеќе од еден префикс.

Така, командата во DSSP може да биде или еден збор (еднозбор) или фраза (фраза), почнувајќи со префикс и содржи број на зборови поставени за овој префикс, и ако префиксот дозволува произволен број зборови, тогаш има ограничувачки збор на крајот, или може да биде фраза дополнета на предната страна со специјални зборови со префикс.

Основниот јазик DSSP не содржи покомплексни синтаксички конструкции од командата и генерално не содржи други конструкции освен оние што се дискутирани погоре. Дури и такви работи кои се неопходни во програмските јазици како израз и функција, отсуствуваат во основниот јазик и може да се воведат, доколку е потребно, само за време на неговиот развој.

Програма на основен јазик е едноставно збирка на команди извршени по редоследот по кој се појавуваат во текстот. Покрај тоа, секоја команда, со исклучок на оние што содржат само примитиви, за време на нејзиното извршување вклучува низа наредби што ги дефинираат зборовите вклучени во неа. Вклучените команди може за возврат да содржат зборови што означуваат командни синџири, кои исто така може да содржат зборови што се однесуваат на нивните поврзани синџири итн. до нивото каде што командите содржат само примитиви.

Општиот опис на јазикот PARA, кој ја формираше содржината на ова поглавје, беше посветен на карактеристиките на структурата на овој јазик и основниот (почетен) сет на неговите команди, кој е збир на вградени команди (примитиви) на DSSP процесорот. Понатамошниот развој на јазикот и соодветното зголемување на способностите на процесорот се врши со воведување нови процедури, команди, формати и типови на податоци конструирани со помош на основни алатки. Како по правило, ваквиот развој е ориентиран кон проблеми по природа и се спроведува во форма на пакети процедури вчитани на влезот на процесорот покрај основниот систем.

Од друга страна, основниот систем може да се надополни со специјални средства имплементирани на негова основа за да се зголеми машинската ефикасност на програмите DSSP. Овие карактеристики ја вклучуваат способноста да се дефинираат поединечни процедури директно во командниот код на машината што се користи. Начинот на дефинирање на процедурата нема никакво влијание врз нејзината понатамошна употреба: имињата на сите постапки се внесуваат во заеднички речник и се целосно еднакви. Голем број на библиотечни програми ви дозволуваат да користите процедури или цели програми напишани на други јазици.

Опис на операции и команди

Операции извршени на оџакот

Операндот е еден од главните елементи на архитектурата на процесорот DSSP. Повеќето инструкции за процесорот го користат стекот, трошејќи ги операндите што им се потребни од него и туркајќи ги резултатите врз него. Толкувањето на податоците на стекот зависи од суштината на проблемот што се решава, т.е., во крајна линија е одговорност на програмерот. Поради фактот што вредноста што се турка на оџакот всушност го губи своето име, тешко е да се одреди од текстот на програмата на кои операнди се применува одредена операција и кои се нејзините резултати. Затоа, коментарите се користат за експлицитно укажување на операндите и резултатите од процедурите на јазикот RAYA. Во овој случај, не е неопходно (и не секогаш е можно) да се опише целата содржина на оџакот. Апсолутно е неопходно да се коментира за горниот дел од оџакот, на кој влијае постапката што се изведува на него, бидејќи без ова јасноста на програмата се губи и нејзината верификација станува тешка.

За да се постигне униформност на програмата, овие коментари треба да се напишат земајќи ги предвид неколку едноставни правила. Како и секој коментар, описот на податоците на оџакот е затворен во квадратни загради. Овој опис е листа на операнди кои се на оџакот во дадена точка во програмата. Секој елемент од списокот ја карактеризира содржината на една позиција на стек; запирка се користи како разграничувач. Вредностите на позицијата на магацинот се наведени од лево кон десно, почнувајќи од најдлабокиот елемент и завршувајќи со врвот на оџакот. Описот на поединечен операнд може да биде број, име, израз или кој било друг значаен запис што го објаснува значењето на вредноста лоцирана на оџакот. Понекогаш има повеќе можни вредности за позиција на магацинот. Во овој случај, вредностите се наведени поделени со коса црта.

Еве пример на коментар кој ја одразува состојбата на оџакот на операндот:

[почетна адреса, N+1,1/0]

Во точката во програмата каде што се наоѓа овој коментар, оџакот на операндот мора да содржи најмалку три позиции, со 1 или 0 на врвот, нумеричка вредност еднаква на N+1 на под-врвот и одреден број под него. , толкувана како почетна адреса.

За погодност за означување на потребната позиција на магацинот, ќе го користиме концептот на длабочина. Ќе претпоставиме дека врвот на оџакот лежи на длабочина 1, под-врвот на длабочина 2, итн. Особено, вредноста означена во примерот како "start.address". лежи на длабочина 3.

Ќе го започнеме нашето проучување на основниот јазик DSSP со команди за туркање вредности на оџакот. Наједноставната (и најчесто користена) команда од овој тип е нумеричка буквална, односно експлицитна индикација за константа што треба да се турка на оџакот. Нека, на пример, сакаме да ги туркаме броевите 28, -5 и 11 на магацинот. За да го направите ова, треба да ја внесеме линијата од тастатурата:

28 -5 11 и притиснете го копчето (вратен превоз). Процесорот ќе ги препознае внесените броеви и ќе ги турка еден по еден на оџакот, така што горниот дел ќе биде 11. За да го потврдите ова, само отпечатете ја вредноста на горниот дел од оџакот на екранот за прикажување. За да го направите ова, користете ја командата DSSP со името. (точка). Со впишување на буквата „период“ на тастатурата и притискање , го добиваме одговорот на екранот: 11, што одговара на последната вредност што се турка на оџакот. Повторно извршување на „точка“ го произведува истиот резултат - оваа команда само го прикажува темето без да ја менува состојбата на стекот.

За да се прикаже целата содржина на стекот на екранот, DSSP ја има командата .. (две точки). Откако го извршивме, ја добиваме линијата на екранот:

Како што можете да видите, формата на отпечатокот ги следи конвенциите за коментирање на состојбата на стек (освен што се користи празно место наместо запирка). Командата .. не ја менува содржината на стекот.

32-битен збор (4 бајти) се користи за претставување на една позиција на стек во меморијата на машината; броевите се претставени во комплементот од два. Соодветно на тоа, DSSP процесорот може правилно да воочи само цели броеви кои лежат во опсег од -2147483648 до 2147483647. Ако внесениот број не може да се претстави со 32 бита (земајќи го предвид знакот), тогаш најзначајните битови што не одговараат се отфрлаат .

Во разгледаните примери, се претпоставуваше дека DSSP процесорот е во децимален режим на влез/излез. За да го поставите овој режим на јазикот PARA, постои команда B10.

Во многу задачи, потребно е обработените податоци да се толкуваат не како бројки, туку како бинарни кодови, односно 32-компонентни битни вектори. DSSP има можност да работи со шифри претставени во бинарни, октални или хексадецимални броени системи. За да го поставите саканиот режим, доволно е да извршите една од трите команди: B2, B8 или B16, по што процесорот ќе ги прифати и отпечати сите внесени кодови во наведениот броен систем.

Оваа функција може да се користи за претворање на децимални броеви во броен систем со основи 2, 8 и 16. На пример, за да го конвертирате бројот 29 треба да ја внесете и извршите следната линија:

Б10 29 Б2. Б8. Б16. Како резултат на тоа, процесорот ќе прикаже серија броеви на екранот: 00000000035 0000001D кои се репрезентации на децималниот број 29 во трите наведени системи на броеви. Забележете дека шифрите се испечатени во нивната машинска претстава, т.е. со водечки нули и без знаците „+“, „-“. При извршување на линијата B10 -2 B8 . ќе го произведе бројот 37777777776, што е комплементарно октално претставување на двете од -2.

Кога работите со хексадецимални кодови, може да се појават судири помеѓу нумеричките буквали и имињата на командите на DSSP процесорот. На пример, зборот B8 во хексадецимален I/O режим може да се толкува како команда за октален режим и како хексадецимална константа. За да избегнете двосмисленост, треба да започнете нумерички буквали со незначајна нула, на пример 0B8.

Основата на командниот систем на DSSP процесорот е операциите на конвертирање на податоци лоцирани на стекот. Општото правило што ја регулира работата на овие операции е дека секоја операција ги троши (ги отстранува) операндите што ги бара од оџакот и ги турка вредностите на резултатот (ако ги има) на нивно место.

Да ги разгледаме инструкциите на процесорот кои спроведуваат четири аритметички операции: собирање, одземање, множење и делење на цели броеви. За нивно прикажување на јазикот на РАЈОТ се користат зборовите: +, -, * и /, соодветно. За да го добиете збирот на два броја на оџакот, на пример 123 и 45, треба да ги турнете овие броеви на оџакот и да ја извршите командата +. За да го направите ова, едноставно внесете ја следнава линија од тастатурата (под претпоставка дека е поставен децимален режим на влез/излез):

123 45 +

Ако сега ја прикажете содржината на магацинот на екранот (со помош на командата ..), ќе го видите резултатот од додавањето:

Операцијата за комутативно множење работи на сличен начин.

При извршувањето на некомутативните операции на одземање и делење, субвертексот на оџакот се зема како минуенд (делив), а врвот се зема како подзаконски (делител). На пример, за да ја пресметате разликата 151-68, треба да ја извршите линијата:

151 68 -

Програмата за извршување на аритметичка операција на јазикот PARA се карактеризира со тоа што операцијата се наоѓа по нејзините соодветни операнди. Оваа нотација на аритметички изрази се нарекува постфиксна (или полска инверзна) нотација и е широко користена во микрокалкулаторите на стек. Нека, на пример, треба да ја пресметаме вредноста на аритметичкиот израз ((127+81)*15-(31+117)*21)*3

Во постфиксната нотација, овој израз ќе изгледа вака:

127 81 + 15 * 31 117 + 21 * - 3 *

Оваа линија (во која зборовите се одделени едни од други со празни места) е готова програма за пресметување на нашиот израз од DSSP процесорот.

Поделбата / командата се разликува од другите аритметички операции по тоа што нејзиниот резултат е две вредности - количникот и остатокот. Количникот завршува на дното на оџакот, а остатокот на врвот. Количникот е негативен ако дивидендата и делителот имаат различни знаци. Остатокот секогаш го има знакот на дивиденда. Еве неколку примери за користење на командата за поделба.

125 7 / [-17,-6] / / /

При вршење на пресметки, може да се појават ситуации на грешка: прелевање и делење со нула. Процесорот DSSP не реагира на нив на кој било начин (особено, кога се дели со нула, содржината на оџакот не се менува), а контролата врз правилната употреба на операциите ја има програмерот.

Кога програмирате, често треба да ја зголемите или намалите вредноста на вредноста за 1 или 2. Специјални команди се воведени во јазикот PARA кои вршат одредени дејства на горниот дел од стекот. Тие се означени со зборовите: 1+, 1-, 2+, 2-. Извршувањето на овие команди е еквивалентно на туркање на потребната константа (1 или 2) на оџакот и потоа извршување на потребната аритметичка операција (+ или -). На пример, 2+ е еквивалентно на зборовниот пар 2+. Воведувањето на овие команди во јазикот беше поттикнато од размислувањата за ефикасност.

Исто така, за да се зголеми ефикасноста, основниот јазик на DSSP процесорот ги содржи командите T0 и T1, кои ја заменуваат вредноста на врвот на стекот со 0 и 1, соодветно, без оглед на тоа која вредност била на врвот пред наведената команда. Примери:

Командите NEG, ABS и SGN се наменети и за работа со нумерички податоци. Командата NEG го менува знакот на горниот дел од стекот, ABS ја заменува вредноста на горниот дел од оџакот со својот модул, SGN троши нумеричка вредност од врвот на оџакот и го става знакот на извлечениот број на негово место: -1 - ако бројот е негативен, 1 - ако е позитивен, 0 - ако е еднаков на нула. На пример:

5 NEG [-5] ABS SGN

Командите на основниот јазик MIN и MAX ви дозволуваат да најдете минимум и максимум два цели броеви. Операндите за овие инструкции се два броја лоцирани на врвот и на долниот дел од стекот. Командата MIN го остава минималниот број на параметри на оџакот, MAX - максимумот од нив. На пример:

5 0 15 МИН [-5,0] МАКС

За да го пронајдете минимумот (максимумот) од три броја на оџакот, само користете ја командата MIN (MAX) двапати:

MIN MIN [-2]

Командата SEG проверува дали бројот содржан на врвот на оџакот спаѓа во наведениот опсег од a до b (вклучувајќи ги границите) и остава знак на оџакот како резултат: 1 ако бројот е во опсегот, и 0 ако не:

SEG [знак] на пример:

Покрај командите фокусирани на работа со нумерички податоци, командниот сет на процесорот DSSP вклучува голем број операции дизајнирани да конвертираат 32-битни кодови. Овие операции го третираат елементот на магацинот како бит вектор од 32 компоненти, чии компоненти се нумерирани од десно кон лево така што најлевиот бит е нумериран со 31, а најдесниот бит е нумериран со 0. Опаѓачкото нумерирање на компонентите следи по нумерирањето на Машински збор битови усвоени за многу микропроцесори.

Наредбите кои се изведуваат на вектори на битови првенствено вклучуваат битни операции на Булова алгебра:

    битна инверзија на врвот на оџакот INV, менувајќи ја вредноста на секој бит од врвот, т.е., заменувајќи го 0 со 1 и 1 со 0;

    битна врска на врвот и субвертексот на стекот &, поставувајќи го i-тиот бит од резултатот, i=31,30,...,0, на вредноста 1 ако i-тите битови на двата операнди се еднакви на 1, а во други случаи поставувајќи го i-тиот бит еднаков на 0;

    битна дисјункција на врвот и субвертексот на стекот &0, поставувајќи го i-тиот бит од резултатот, i=31,30,...,0, на вредноста 0 ако i-тите битови на двата операнди се еднакви на 0, а во други случаи поставувајќи го i-тиот бит еднаков на 1;

    битно собирање (нееквивалентност) „+“ на теме и подвертекс, поставувајќи го i-тиот бит од резултатот на 0 ако i-тите битови од двата операнди имаат исти вредности, и поставувајќи го i-тиот бит од резултира со 1 ако вредностите на i-тите битови од операндите се различни.

525 INV 722 & 136 & 0 325 "+"

Сврзникот со битови често се користи за ресетирање (бришење) на битови од зборот. За да го направат ова, тие вршат спој на оригиналниот збор со маска која содржи нули во оние битови што треба да се исчистат и оние во преостанатите битови. На пример, ако треба да ги ресетирате битовите од 3 до 5 во некој збор X, треба да ја извршите неговата битна врска со маската 37777777707. За X=235 добиваме:

Дисјункција на битови може да се користи за да се стави саканата комбинација на битови во претходно исчистена група на битови од зборови. Нека, на пример, треба да ја ставите бинарната комбинација 010 во битови од 3 до 5 од зборот што останал на магацинот како резултат на последниот пример. Ова може да се направи вака:

Операциите за манипулација со битови, исто така, вклучуваат команди за логично поместување:

    лево поместување SHL - секој бит од врвот на оџакот, почнувајќи од 31-от, ја зема вредноста на следниот по опаѓачки редослед, а последниот, нулти бит ја зема вредноста 0;

    десно поместување SHR - секој бит од врвот на оџакот, почнувајќи од 0, ја зема вредноста на следниот во растечки редослед, а 31-от бит ја зема вредноста 0;

    поместување на горниот дел SHT - горниот елемент се отстранува од оџакот и се третира како цел број N, што покажува колку поместувања и во која насока треба да се направат на врвот на оџакот: кога N>0 се прави поместување налево , кога Н<0 - вправо.

B8 125 SHR SHL -2 SHT

Операциите на лево поместување може да се користат за множење на броеви со 2 до моќта на N, каде што N е природен број кој го одредува бројот на поместувања. На пример, множењето на бројот -5 со 8 може да се направи со поместување на бројот 3 места налево:

B10 -5 3 SHT [-40]

Мора да се земе предвид можноста за прелевање.

Десното поместување може да се користи како поделба со 2 на моќноста на N само за позитивни броеви, бидејќи најзначајниот (знак) бит е поставен на нула за време на десното поместување. На пример:

при што

Наредбите за циклично поместување на горниот дел од оџакот за 1 бит на десно ROR и лево ROL се слични на командите за логичко поместување, освен што истиснатиот најоддалечен бит не исчезнува, туку се турка во празниот простор на спротивниот крај на 32-битен долг збор. На пример (хексадецимални броеви):

DSSP процесорските команди SWB и SWW се исто така наменети за обработка на бинарни кодови. Функцијата SWB е да ги замени бајтите од половината од горната страна на стекот од низок ред, а функцијата SWW е да ги замени половините од врвот на стекот. Ајде да илустрираме како функционираат овие команди користејќи хексадецимален I/O режим (во овој режим, секој бајт е претставен со две хексадецимални цифри):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Наредбите за манипулација со стек играат важна улога во јазикот PARA. Тие не ги менуваат вредностите на податоците лоцирани на оџакот, туку само ја менуваат нивната локација, што го олеснува пристапот до операнди лоцирани длабоко во стекот.

Постојат три команди за бришење на елементи на стек: D, DD, DS (Drop). Командата D отстранува еден (горен) елемент од оџакот, DD отстранува два елементи, на пример:

D DD D DS ги отстранува сите елементи од оџакот (го брише оџакот):

Командата за копирање на горниот дел од стекот C (Копирај) турка копија од моменталната вредност на нејзиниот врв на оџакот. Ова е еквивалентно на дуплирање на горниот елемент на магацинот: стариот врв станува субвертекс, а неговата копија станува нов врв. Пример:

Да ја прикажеме употребата на оваа команда користејќи го примерот за пресметување на полиномот p(x)=3*x**2+4*x-5 со помош на шемата на Хорнер: p(x)=(3*x+4)*x- 5. Претпоставуваме дека вредноста x е содржана на врвот на оџакот.

[x] C 3 * 4 + * 5 -

Заедно со командата за копирање на горниот дел од стекот, јазикот PARA има и команди C2, C3, C4, кои копираат елементи лоцирани на длабочините 2, 3, 4. Нивната работа може да се објасни со следните примери:

C2 C4

Исто така, постои команда CT за копирање на елемент лоциран на длабочина одредена на врвот на оџакот. При изведување на КТ, процесорот го отстранува горниот елемент од оџакот, ја користи неговата вредност како показател за длабочината на копираниот елемент и турка копија од вториот на оџакот. Така, копирањето на елементот лоциран на длабочина 5 е специфицирано со пар од 5 CT инструкции, при што процесорот ќе го турне бројот 5 на оџакот и потоа ќе ја изврши инструкцијата CT. Извршувањето на КТ со параметрите 1, 2, 3, 4 е еквивалентно на командите C, C2, C3, C4, соодветно.

Наредбите за размена E2, E3, E4 (Exchange) го преуредуваат првиот (горниот) елемент од оџакот, соодветно, со 2-ри, 3-ти, 4-ти, т.е., со елементот лоциран на длабочина од 2, 3, 4. На пример:

Е3 Е2

За размена на поголема длабочина, користете ја командата ET, која, како и CT, ја користи вредноста на горниот дел од стекот како индикатор за длабочината на елементот што се разменува со првиот елемент. На пример:

5 ET

Командата ET со параметрите 2, 3, 4 е еквивалентна на командите E2, E3, E4.

За да ја илустрирате употребата на командите за копирање и споделување, размислете за задача за учење. На оџакот се дадени три броја. Потребно е да се примат на магацинот: . Можете да ја предложите следната програма, чие значење е јасно од коментарите.

C3 C3 C3+

Е4+Е4

Овој пример добро покажува колку е важна улогата на коментарите, одразувајќи ја состојбата на оџакот на операндот.

Во програмите, често е неопходно да се споредат нумеричките вредности едни со други и да се извршат различни постапки во зависност од резултатите од споредбата. Јазикот RAYA има команди за споредба<, =, >. Тие се дефинирани преку броеви и како резултат ги произведуваат нумеричките вредности 0 и 1. Значи, командата< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >испраќа 1 кога долниот елемент е поголем од горниот елемент. За програмирање на нестроги споредби (помали или еднакви, поголеми или еднакви), се користи инструкцијата NOT, која ја заменува вредноста на врвот на стекот што не е еднаква на нула со нула, а еднаква на нула со една. На пример, евалуацијата на логичкиот израз x>=5, каде што x е некој број сместен на врвот на стекот, може да се специфицира на следниов начин:

[x] 5< NOT

Понатамошно проширување на програмските способности на условите е обезбедено со употребата, заедно со командите за споредба, на логичките операции на сврзување & (логички И) и дисјункција &0 (логичко ИЛИ). Нека, на пример, сакате да добиете 1 на оџакот ако бројот x на темето припаѓа на полусегментот C 5< NOT C2 10 <

&E2 2 = &0

Контролите на програмата во зависност од резултатите од споредбата ќе бидат разгледани подоцна.

Дефинирање на процедури

Како основна програмска техника, DSSP му овозможува на корисникот можност да дефинира именувани секвенци на операции наречени процедури. Нека, на пример, треба да ги пресметате вредностите на квадратниот трином 3*x**2-4*x+9 за дадените вредности на x. Во овој случај, треба да дефинирате процедура која ја имплементира триномната формула и го дава резултатот на терминалот, а потоа да ја примените оваа постапка на специфични вредности на x. Потребната постапка, да ја наречеме PX, е дефинирана на следниов начин: PX [x] C 3 * 4 - * 9 + . Д ; Дебелото црево означува операција „дефинирај процедура“, со името на процедурата проследено со дебелото црево по просторот за одвојување. Дефинирачката низа наредби (телото на постапката) се наоѓа по името на постапката и завршува со точка-запирка. Накратко, постапката е дефинирана во форма:

: <имя процедуры> <тело процедуры> ;

Јазикот RAYA бара коментирање на состојбата на оџакот на операндот на почетокот и на крајот на процедурата. Во телото на постапката, коментарите се ставаат по дискреција на програмерот на места кои се тешко разбирливи.

Коментарите им помагаат на луѓето да ја разберат и користат процедурата; процесорот едноставно игнорира сè што е ставено во загради. Затоа, при внесување на дефиницијата за поединечна процедура од терминалот, коментарите може да се изостават.

Откако ќе се внесе дефиницијата на постапката и ќе се притисне копчето процесорот е информиран за крајот на влезот, на екранот на терминалот се појавува ѕвездичка, што го сигнализира извршувањето на командата „дефинирај процедура“ и подготвеноста на процесорот да продолжи со дијалогот. Сега можете да ја примените процедурата PX на вредностите x наведени од тастатурата, на пример, до 2, 3, 4 (произведени од процесорот е подвлечено):

* 2 PX 13

* 3 PX 24

* 4 PX 41

Дозволете ни да дефинираме поопшта процедура за пресметување на трином од формата a2*x**2+a1*x+a0, што ви овозможува да ги наведете вредностите и на x и на a0, a1, a2. Да го наречеме PXA:

: PXA C E4 E3 * + * + ;

Кога користите PXA, вредностите a0, a1, a2, x мора да бидат во потребната низа на оџакот. На пример: a0=1, a1=2, a2=-3, x=4

* 1 2 -3 4 PXA . Д -39

Телото на процедурата, заедно со основните операции на процесорот, може да содржи процедури дефинирани од корисникот. На пример, можете да дефинирате процедура P која, покрај пресметките што ги врши PXA, ќе отпечати копија од резултатот на терминалот и ќе го отстрани резултатот од оџакот.

:PXA. Д ;

Особено, телото на постапката може да го вклучи името на самата постапка што се дефинира, односно постапката може да биде рекурзивна. На пример:

: ВРЕМЕ [t] 1- ВРЕМЕ ;

Оваа постапка ја намалува вредноста на врвот на стекот за 1 и повторно се однесува на себе, односно работи како бројач на време.

Бројачот TIME, во принцип, не може да запре: постапката за одземање на еден ќе се врши одново и одново додека работи процесорот. Но, во DSSP постојат алатки кои ви дозволуваат да го контролирате напредокот на процесот во зависност од добиените резултати - операцијата за контролирање на напредокот на програмата.

Условно извршување и повторување

Програма која е низа од команди извршени по редоследот што се појавуваат една по друга во нејзината нотација се нарекува линеарна. За да биде програмата лесно видлива (читлива) и разбирлива, таа се дели на именувани делови кои имаат одредено значење - процедури, секоја дефинирана со своја низа постапки, кои пак се дефинирани со низи помали процедури итн. на постапките одредени директно со секвенци на DSSP команди. Таквата програма, напишана како хиерархија на дефиниции за процедури, се нарекува структурирана. Начинот на конструирање на структурирана програма, кој се состои во постепено разложување на проблемот што треба да се реши на помали и помали подзадачи, се нарекува структурирано програмирање.

Создавањето не само линеарни, туку и какви било програми со помош на методот на структурирано програмирање е можно ако има операции на извршување на процедура според услов, повторување на процедура и излегување од повторена процедура. Збирот на команди од овој вид достапни во DSSP обезбедува можност за структурирана конструкција на произволна програма.

Условите за извршување или неизвршување постапка се формулирани во однос на знакот на бројот, поточно, во однос на знакот на вредноста што моментално ја има врвот на стекот. Главната команда за извршување на условна процедура - BRS (BRanch on Sign) наложува да се изврши една од трите процедури именувани по BRS во зависност од знакот на моменталната вредност на горниот дел од стекот. При извршувањето на BRS, процесорот го отстранува горниот елемент од оџакот, ја тестира неговата вредност и ако е негативен, тогаш ја извршува првата од овие постапки, ако е нула, тогаш вториот, а ако е позитивен, тогаш трето. Значи тим

ќе предизвика да се отстрани еден елемент од стекот и да се изврши постапката N ако отстранетата вредност е негативна, постапката P да се изврши ако е позитивна и постапката Z да се изврши ако е нула.

Пример за употреба на командата BRS е следнава дефиниција за SGN процедура

: SGN [X] BRS -1 0 1 ;

Оваа постапка ја заменува вредноста X на врвот на оџакот со бројот -1 ако X<0, числом 0, если X=0, и числом 1, если X>0. Постапката SGN е достапна во DSSP како основна операција на процесорот.

Командата BRS, заедно со избирање на една постапка од три податоци, обезбедува можност за имплементирање на изјави со две вредности од формата АКО-ТОГАШ и АКО-ТОГАШ-ДЛУГО. На пример, реченицата ако x>0 тогаш P1 друго P0 одговара на наредбата BRS P0 P0 P1, а реченицата ако x<>0 потоа P - команда BRS P NOP P, во која NOP е име на празна операција. Но, во DSSP постои поефикасна имплементација на услови со две вредности - командите IF-, IF0, IF+, BR-, BR0, BR+.

Командите на групата IF одговараат на изјавата АКО-ТОГАШ. На пример, командата IF-P дава инструкции да се отстрани горниот елемент од оџакот и да се тестира неговиот знак, а ако овој елемент има знак минус, тогаш извршете ја процедурата P. Наредбите IF0 P и IF+ P наредуваат да се изврши постапката P, соодветно , во случај кога отстранетиот елемент е еднаков на нула, и во случај кога неговата вредност е позитивна.

Како пример што ја илустрира употребата на командите на групата IF, ја даваме дефиницијата за команда во основниот јазик ABS што го пресметува модулот на горниот дел од стекот.

: ABS [X] C IF-NEG [|X|] ;

Наредбите BR-, BR0 и BR+ кореспондираат со изјавата IF-THEN-ELSE, со инструкции за избор на една од двете постапки именувани по нив. Ако знакот на елементот отстранет од стекот се совпаѓа со оној во ознаката на командата, тогаш се извршува постапката именувана прва, а ако не се совпаѓа, тогаш се извршува втората постапка. На пример, наредбата BR0 P0 P1 наложува да се изврши процедурата P0 во случај кога елементот отстранет од стекот е еднаков на нула, а ако овој услов не е исполнет, тогаш извршете ја постапката P1.

Разгледаните команди ви овозможуваат економски да програмирате извршување на процедура во зависност од овие услови. Најчести услови од формата x<0, x=0, x>0 се директно имплементирани од инструкциите на групата IF. Услови x<=0, x<>0, x>=0 се програмирани со помош на инструкциите BR-, BR0, BR+ со користење на празната операција NOP како прва постапка. На пример, клаузулата if x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: НЕ [x] BR0 1 0 ;

Разгранувањето на програмата често се прави по команди за споредба (<, =, >), произведувајќи логичка вредност од 1 или 0 во зависност од резултатот од споредувањето на два броја. Командата MAX на основниот јазик, на пример, може да се програмира на следниов начин:

: MAX C2 C2< IF+ E2 D ;

Групата команди за разгранување ја вклучува и командата за избор на BR, напишана во форма:

BR A1 P1 A2 P2 ... AK PK ... AN PN ДРУГО P0

При имплементирање на оваа инструкција, процесорот најпрво ја извршува постапката на покажувачот А1 и ја споредува вредноста што ја турнал на оџакот со вредноста под неа од претходниот врв на стекот. Ако вредностите се совпаѓаат, тогаш горните два елементи се отстрануваат од магацинот и се извршува постапката P1 поврзана со покажувачот А1, по што се врши преминување на инструкцијата по инструкцијата BR (т.е., во горната нотација, еден по зборот P0 во текстот на програмата). Ако споредените вредности не се совпаѓаат, тогаш горниот елемент се отстранува од оџакот (т.е. резултатот од A1) и истите дејства се вршат со парот A2 P2, тогаш, ако нема совпаѓање, тогаш со парот A3 P3 итн. до AN PN вклучено. Ако ниту еден од обидите не даде совпаѓање, постапката P0 именувана по зборот ELSE се извршува. Вообичаено, нумеричките константи дејствуваат како постапки за покажувач, на пример:

[x] C BR 5 NEG -3 ABS 0 НЕ ДРУГО T0 [y]

Како резултат на извршување на оваа линија, вредноста y=-5 ќе се добие на врвот на стекот ако x=5; y=3 ако x=-3; y=1 ако x=0 и y=0 во сите други случаи.

Општо земено, постапката на покажувачот може да биде не само нумеричка константа, туку и променлива или која било друга постапка што го задоволува едноставното барање да не исфрли ништо од оџакот и да турка една вредност на оџакот.

За да илустрираме како се користат операциите за извршување на условна процедура, ајде да ја измениме процедурата TIME во претходниот дел, така што бројачот ќе престане кога ќе се појави дадена состојба:

: ВРЕМЕ [t] 1- C АКО+ ВРЕМЕ ;

Сега оваа процедура ВРЕМЕ се нарекува себеси само кога врвот на магацинот е позитивен. Бројачот ќе работи точно N пати ако на почетокот на првото извршување на TIME темето содржи позитивен број N. На пример, за да добиете 7 операции, треба да поставите

7 ВРЕМЕ<ВК>

Бидејќи IF+ во дефиницијата TIME, како и секоја условна операција, го отстранува елементот што се тестира од оџакот и овој елемент е неопходен за последователни операции, тој мора да се дуплира со ставање на операцијата C (Копирај) пред IF+.

Рекурзијата не е основно средство за извршување на процедура повеќе пати. За програмирање циклуси на јазикот PARA, постојат команди RP (Повтори - повторува) и DO (Do - do, execute).

Командата RP W ве наложува да ја извршите постапката W одново и одново неограничен број пати. За да престанат повторувањата, телото на процедурата W мора да содржи операција EX (Излез) што се извршува под дадена состојба. Операцијата EX преминува кон извршување на постапка што ја следи во програмскиот текст повторената постапка што ја содржи оваа операција EX. Така, бројачот имплементиран погоре како рекурзивна процедура TIME може да се програмира да ја повтори постапката W, која е дефинирана на следниов начин:

: W [t] 1- C IF0 EX ;

За да го направите бројачот да работи 25 пати, треба да ја извршите линијата

Заедно со операцијата EX, која се користи во командите за условно извршување, постојат операции за условно излегување EX-, EX0, EX+, кои го произведуваат истиот ефект како командите IF-EX, IF0 EX, IF+ EX, т.е. го трошат горниот елемент , тестирање на неговиот знак и излегување ако знакот се совпаѓа со она што е наведено во ознаката за операција. Операциите EX, EX-, EX0, EX+ може да се користат не нужно во телото на самата постапка што се повторува (во нашиот случај W), туку и во постапките на кои се однесува.

Како пример, разгледајте го проблемот со наоѓање на најголемиот заеднички делител на два природни броја користејќи го методот на Евклид. Суштината на методот е дека треба да одземете помал број од поголем број додека броевите не станат еднакви еден на друг. Откако ќе се постигне еднаквост, ќе се најде најголемиот заеднички делител.

Програмирањето ќе се врши со методот на развој од горе надолу. Прво, ние дефинираме GCD процедура која ја опфаќа општата шема на алгоритмот. Параметрите на оваа постапка се два броја M и N на оџакот, за кои се наоѓа најголемиот заеднички делител. Телото на постапката GCD мора да наведе цикличен процес за конвертирање на вредностите на оџакот. Како резултат на овој процес, два еднакви броја треба да останат на оџакот - кој било од нив може да се земе како најголем заеднички делител. Земајќи ги предвид овие размислувања, постапката на GCD може да се дефинира на следниов начин.

: GCD RP ЧЕКОР [nod(M,N),nod(M,N)] D [nod(M,N)] ;

Сега е потребно да се програмира еден чекор од итеративниот процес, т.е. дефинирајте ја постапката ЧЕКОР. Параметрите за него се два броја на оџакот. Треба да ги споредите овие бројки и да излезете од јамката ако се еднакви, во спротивно, одземете го помалиот од поголем. Ова може да се направи, на пример, вака:

: ЧЕКОР C2 C2 - BRS NOP EX E2 C2 - ;

Сега во програмата нема останати недефинирани процедури и можете да почнете да ја проверувате. Проверката треба да се изврши од дното нагоре, односно прво треба да се уверите дека постапката STEP работи правилно и дури потоа - GCD.

Операцијата DO на основниот јазик предизвикува постапката именувана по него да се повторува N пати, каде што N е бројот содржан на врвот на оџакот во моментот кога се извршува DO. На пример, за да може постапката P да се изврши 8 пати, треба да поставите

8 DO P

Ако има барем една излезна операција во телото на постапката P и условот за нејзино извршување е исполнет пред да се случат одредениот број повторувања, тогаш повторувањата ќе се прекинат со излегување од постапката на ист начин како што се прави во случај на операција РП. На пример, кога DO ја повторува горната W процедура чија дефиниција содржи IF0 EX, пишувањето [T] 30 DO W ќе предизвика 30 повторувања на W ако вредноста на T>=30. Ако 0

Ако до моментот кога ќе се изврши операцијата DO има нула или негативна вредност на врвот на стекот, тогаш постапката што следи по DO нема да се изврши ниту еднаш.

За да ја илустрираме употребата на операцијата DO, дефинираме постапка NUM која го брои бројот на битови кои не се нула во 32-битниот збор x даден на врвот на стекот.

Бројачот за бројот на единици ќе го поставиме на подвертексот на оџакот. Единиците за броење ќе се состојат од повторување на постапката NUMI 32 пати, во која ќе испитаме еден бит од зборот x. По излегувањето од јамката, потребниот број треба да биде на врвот на оџакот.

: NUM [x] 0 E2 32 DO NUMI D [N] ;

За да броиме битови без нула, го користиме фактот дека еден во најзначајниот (31-ви) бит од зборот служи како знак за негативен број. Ако зборот што се проучува е негативен, тогаш тој мора да се додаде на N. На крајот од процедурата NUMI, треба да го поместите зборот што се проучува еден бит налево.

: NUMI C IF- N+ SHL ;

Имплементацијата на процедурата N+ е прилично едноставна: треба да додадете еден на долниот дел од стекот без да го менувате горниот дел.

: N+ E2 1+ E2;

Повторливите процедури може да содржат RP и DO операции во нивните тела, што доведува до вгнездени јамки и дозволена е секоја длабочина на гнездење. Во овој случај, постои операција EXT за излез од вгнездената јамка, што ја означува длабочината на вгнездување на врвот на оџакот. На пример, излегувањето од две вгнездени јамки може да се специфицира вака:

Треба да се има на ум дека користењето на командата EXT бара зголемена грижа, бидејќи при модификација на програмата, длабочината на вгнездување на јамките може да се промени и соодветната константа пред EXT ќе треба да се смени.

Именувани податоци

Операндот е главниот, но не и единствениот механизам за манипулирање со податоци во DSSP. Исто така, можно е, заедно со дефинициите на процедурите, да се декларираат елементи и стандардно организирани збирки на елементи (т.н. структури) на податоци, кои потоа се достапни за употреба со нивните имиња. Со имплементирање на декларации на податоци, процесорот ја задржува потребната меморија за нивно складирање и ги обезбедува потребните механизми за пристап до оваа меморија.

Основниот DSSP јазик вклучува голем број на директивни зборови дискутирани подолу за декларирање на променливи и низи. Со цел да се прошири системскиот јазик, во него може да се воведат други зборови од овој вид и, соодветно, други елементи и структури на податоци.

Зборот VAR декларира 16-битна нумеричка променлива. На пример, рекорд

декларира променлива X, односно му кажува на процесорот дека името X е име на променлива. Процесорот поврзува со ова име 16-битна мемориска ќелија во која ќе се зачува вредноста на оваа променлива. Инструкцијата за доделување на променливата X на вредноста содржана на врвот на стекот на операндот има форма

Со извршување на оваа команда, процесорот го отстранува горниот елемент од оџакот и ја запишува неговата вредност во ќелијата доделена за променливата X.

Командата која се состои само од име на променлива, без буквата ! пред неа, предизвикува вредноста на оваа променлива да се турка на магацинот, а туркањето се врши со копирање на содржината на соодветната мемориска ќелија, т.е. вредноста на променливата останува непроменета. Така, секое појавување на име на променлива X во програма, освен ако веднаш не ѝ претходи збор што наведува различно дејство, ќе ја турне моменталната вредност на оваа променлива на оџакот, исто како што директно дадените броеви (нумерички буквали) се туркаат на оџакот. .

Како пример, даваме друга верзија на постапката GCD дискутирана погоре во која се користат две работни променливи.

: КРЕМ! X! Y RP ЧЕКОР X [GCD] ;

: ЧЕКОР X Y = EX+ X Y BR+ X-Y Y-X ;

: X-Y X Y - ! X ;

: Y-X Y X - ! Y ;

Како што можете да видите, програмата стана нешто подолга, но нејзината видливост се зголеми.

Зборот VCTR декларира еднодимензионална низа (вектор) од 16-битни ќелии, при што бројот на највисокиот елемент од оваа низа е даден со вредноста на темето. На пример, како резултат на снимање

9 VCTR ROW, процесорот резервира 10 последователно адресибилни 16-битни зборови од меморијата, формирајќи ROW(0:9) вектор. Прво, бројот 9 се турка на оџакот, а потоа се извршува процедурата VCTR, користејќи го горниот елемент на стекот за да се одреди должината на векторот ROW што треба да се креира.

Туркање на вредноста на j-тиот елемент од векторот ROW на оџакот, 0<=j<=9, задается командой

[j]ROW

Користејќи број на елемент на оџакот како параметар, името на векторот ROW предизвикува тој број да се замени со вредноста на соодветниот елемент. Ако зборот! е непосредно пред името на векторот ROW, тогаш на елементот на овој вектор означен со темето му е доделена вредноста на подвертексот, а длабочината на оџакот е намалена за 2. На пример, можете да го ресетирате 5-ти елемент од векторот ROW вака:

Исто така, можно е да се комбинираат константни вектори, т.е. вектори од 16-битни броеви, чии вредности се одредуваат кога се декларираат и не се менуваат последователно. Така, вектор од 16-битни константи VC со должина L+1 е деклариран со користење на зборот CNST во форма:

CNST VC k0 k1 ... kL;

каде што k0, k1, ... kL се команди кои туркаат една вредност на оџакот. Најчесто тоа се само нумерички буквали, но може да има и имиња на променливи, процедури, како и наредби што се состојат од парови зборови, како што е, на пример, командата за испраќање на адресата на променливата „X“ што се дискутира подолу. Пристапот до елементите на константен вектор се врши на ист начин како и до компонентите на обичните вектори. На пример:

Повеќедимензионална низа од 16-битни зборови се декларира со користење на зборот ARR, на која му претходат максималните вредности на индексот за секоја димензија и бројот на димензии. На пример, тридимензионалната низа TIR(0:8,0:2,0:24) е декларирана вака:

Бројот 3 непосредно пред ARR ја означува големината на декларираната низа.

Туркањето на елементот на низата на стекот се постигнува со одредување на индексот на тој елемент проследен со името на низата. На пример, командата за туркање на елементот TIR(0,2,2) на оџакот се изразува како

Соодветно на тоа, доделувањето на овој елемент на тековната вредност на врвот на магацинот е наведено со командата

Сите разгледани примери го илустрираа создавањето на структури од 16-битни зборови. Меѓутоа, јазикот исто така ви овозможува да дефинирате 32-битни структури на зборови и 8-битни бајти. За да го направите ова, префиксот LONG или BYTE се става пред зборот што ја дефинира структурата, соодветно. На пример,

5 BYTE VCTR X - дефиниција на 6-компонентен бајт вектор X;

BYTE CNST Y 65 66 67; - дефиниција на 3-компонентна бајт-векторска константа Y;

10 20 2 LONG ARR MTRX - дефиниција на матрицата на долги зборови MTRX(0:10,0:20).

Читањето на елементите на структурите на зборови и бајти се изведува на ист начин како и во случајот со 16-битни структури на зборови. Ако должината на елементот е помала од 32 бита, вредноста што треба да се добие се става во нискиот збор или бајт на горниот дел од стекот, а високиот дел од горниот дел е поставен на нула. Вредноста доделена на елемент од структура на збор или бајт е исто така нискиот збор или бајт од 32-битен долг збор на оџакот.

Иако 16-битниот формат на зборови се користи при стандардно дефинирање на податоци, тој исто така ја има ознаката WORD. Препорачливо е да се користи овој префикс кога програмата е наменета да се префрли на други машини, каде што е имплементиран и DSSP, а стандардниот може да биде различен.

Бајтните структури на податоци најчесто се користат за складирање и обработка на текстуални информации. Ова се објаснува со фактот дека еден бајт е доделен во компјутерската меморија за кодирање на еден знак. За да наведете шифри на знаци во јазикот RAYA, постои конструкција #l, каде што l е секој знак достапен на тастатурата на компјутерот. Процесорот DSSP ја перцепира оваа конструкција како команда за туркање на кодот од буквата l на стекот. На пример:

Оваа конструкција ги извршува истите дејства како нумеричка буквална еднаква на кодот на наведената буква, но неговата употреба е попожелна, бидејќи, прво, ве ослободува од потребата да запомните кодови и, второ, ги прави програмите поразбирливи. Конкретно, можеме да ја дадеме следната дефиниција за константниот вектор Y:

BYTE CNST Y #A #B #C ;

Често е погодно да се користи симболична нотација за нумеричка константа во програмата. За да се обезбеди оваа способност, постои квалификатор VALUE:

Оваа команда го исфрла горниот елемент од магацинот и формира збор со името веднаш по VALUE. Употребата на овој збор е еквивалентна на употребата на нумеричка константа. На пример:

Работа со меморија по физички адреси

Разгледаните алатки обезбедуваат можност за именување на податоците и манипулирање со податоци без оглед на системот за адреси на компјутерот. Но, основниот јазик вклучува и алатки кои ви дозволуваат да манипулирате со адресите на мемориските елементи. Адресата на променливата или елементот на низата X се турка на оџакот со командата

Во случај на елемент од низа, на оваа команда и претходи вредноста на индексите.

Командата за основниот јазик @ ја заменува адресата од врвот на магацинот на зборот со долга меморија со вредноста што го содржи тој збор. На пример, вредноста на променливата Y може да се турка на оџакот со извршување на следната линија:

Инструкцијата @B ја заменува адресата со вредноста на соодветниот бајт, поставувајќи ги високите бајти на врвот на стекот на нула, а инструкцијата @L ја заменува адресата со 32-битен збор.

Постојат и команди за запишување вредности во меморијата. Инструкцијата!T ја запишува 16-битната вредност на подврвот на адресата отстранета од врвот на стекот. Командата!TB предизвикува слично запишување на нискиот бајт на подвертексот на бајтот адресиран од темето, а!TL го запишува 32-битниот збор на подвертексот на зборот адресиран од темето. На пример, можете да ја доделите вредноста 15 на петтиот елемент од векторот на бајт BV(0:5) со следните команди:

15 5" BV!TB

Потребата за работа со меморија на физички адреси обично се јавува при креирање на програми кои зависат од архитектурата на одреден компјутер, на пример, при креирање на драјвери за влез/излез.

Дополнителни операции за работа со податоци и меморија

Со цел да се постигне поголема ефикасност и компактност на програмите, следните операции се воведени во јазикот PARA:

0 <имя переменной>- ресетирајте ја променливата;

1 <имя переменной>- додели единица на променлива;

1- <имя переменной>- да ја намали вредноста на променливата за еден;

1+ <имя переменной>- зголемување на вредноста на променливата за еден;

!- <имя переменной>- од променливата одземете ја вредноста на врвот на стекот;

!+ <имя переменной>- додадете ја вредноста на горниот дел од стекот на променливата.

Секоја од овие операции лесно се програмира со помош на променливи команди за читање и пишување. На пример,

0 X е еквивалентно на 0! X

1+ X е еквивалентно на X 1+ ! X

X е еквивалентно на X E2 - ! X

Користењето на овие операции ја зголемува ефикасноста и видливоста на програмите.

Во пракса, честопати сакате да доделите една вредност на сите елементи на низата. За таа цел има операција на рајски јазик!!!<имя массива>. Неговиот ефект е да ја додели вредноста на горниот дел од стекот на сите компоненти на наведената низа. Операција!!! применливо за низи со елементи од кој било формат.

Пример за употреба:

Кодот за празно место е запишан на сите компоненти на бајтната низа BUF.

Често е неопходно да се добијат информации од програма за структурата на податоци зад името. Има неколку команди SIZE за ова? - прикажете го форматот на податочниот елемент: 1, 2 или 4 бајти и DIM? - прикажување на бројот на податочни елементи во структурата. На пример, ако податоците се декларираат

3 4 2 LONG ARR Z

тогаш, кога ќе се применат на нив, овие команди ќе го дадат следниот резултат (децимални броеви):

ГОЛЕМИНА? X ГОЛЕМИНА? Y ГОЛЕМИНА? З

DIM? X DIM? Y DIM? З

Комплетот на команди на DSSP процесорот вклучува, како додаток, четири команди кои ви дозволуваат да читате и запишувате поединечни битови од мемориските ќелии на компјутерот. Ова се командите @BI, !BI, !BI0, !BI1. Параметрите за секој од нив се адресата на меморискиот збор на оџакот и бројот на битот во овој збор (запомнете дека битовите се нумерирани од десно кон лево, почнувајќи од нула). Командата!BI исто така претпоставува дека има бит вредност на стекот што треба да се запише. Командата @BI ги заменува наведените параметри со вредноста на избраниот бит (0 или 1), командите!BI0 и!BI1 го поставуваат избраниот бит на 0 и 1, соодветно, отстранувајќи ги нивните параметри од оџакот и!BI командата го поставува избраниот бит на вредноста на најмалку значајниот бит од третиот елемент на оџакот и ги отстранува сите три негови параметри од оџакот. На пример, ако вредноста на променливата X е бинарниот број 101101, тогаш резултатите од наведените операции ќе бидат како што следува:

" X [add.X] 3 @BI - трет бит од X, 0" X 3 !BI - X е 100101,

" X [add.X] 0 !BI0 - X е 100100,

" X [додај.X] 1 !BI1 - X е еднаков на 100110.

Јазикот PARA има и алатки за работа со низи од бајти лоцирани во меморијата. За да се одреди бајт стринг, два параметри се туркаат на оџакот: почетната адреса на низата (т.е. адресата на нејзиниот прв бајт) и должината на низата (бројот на бајти во неа).

Командата!!!MB се користи за доделување на сите бајти од низата една вредност (наведена на оџакот). Тој троши три параметри од стекот: , каде што b е доделената вредност, a и l се почетната адреса и должината на низата бајти, соодветно. Нека, на пример, треба да ги ресетирате елементите од низата од 3 до 10 бајти TXT(0:20). За да го направите ова, можете да ја извршите следната линија:

0 3 "TXT 8!!!MB

како резултат на тоа, осум последователни елементи од наведената низа, почнувајќи од 3-та, ќе ја добијат вредноста 0. Слична команда!!!MW е наменета да пополни низа од 16-битни зборови со иста вредност (бројот на зборови е означено на врвот на магацинот), а командата !!M - да се пополни низа долги зборови.

Командата!SB врши пренос на низа од бајти. Неговите параметри се: , каде што a1 и l се почетната адреса и должината на проследената низа, a2 е почетната адреса на низата на која се врши препраќањето. Како резултат на извршувањето на командата!SB, низа од бајти со должина l ќе биде лоцирана во меморијата од адресата a2, што е точна копија на низата лоцирана на адресата a1 пред да се изврши преносот. Низата на изворот и низата од целта може да се преклопуваат. Нека, на пример, сакате да ги преместите елементите на бајтната низа M(0:10) на следниов начин: M(10):=M(9), M(9):=M(8), ..., М(1):= М(0). За да го направите ова, можете да ја користите командата !SB:

0 " M 10 C2 1+ !SB

Како резултат на тоа, низа од 10 бајти ќе биде поместена за еден бајт кон зголемување на мемориските адреси.

Командата!SB е погодна за работа со купишта знаци (запомнете дека секој знак е кодиран со еден бајт). Овозможува, на пример, да се додели вредноста на експлицитно одредената буквална низа на низа од бајти. За да наведете таков стринг, користете буквален текст, т.е. низа од знаци затворени во наводници, на пример „ТЕКСТ БУКВАЛЕН“. Оваа конструкција, кога ќе се сретне во програма, предизвикува почетната адреса и должината на низата од бајти што содржи цитиран текст да се туркаат на оџакот. Овие параметри потоа може да се користат со командата!SB. На пример, фрагментот "ТАБЕЛА" 0 " TN !SB ќе предизвика буквалната "ТАБЕЛА" да биде проследена до низата TN.

Командата SRCHB бара одреден бајт во низа. Параметри: , каде што b е бајтот чијашто прва појава мора да се најде, a и n соодветно ја одредуваат почетната адреса и должината на низата во која се врши пребарувањето. Ако n>0, тогаш пребарувањето се врши од адреса a до адреса a+n-1 (во насока на зголемување на адресите), ако n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T „ТЕКСТ“ SRCHB

#А „ТЕКСТ“ SRCHB

#E „ТЕКСТ“ [#E,a,4] 1- + -4 [#E,a+3,-4] SRCHB [-2]

Завршувајќи го нашето разгледување на алатките за работа со податоци, да се задржиме на прашањето поврзано со складирање на податоци во надворешната меморија на компјутерот, т.е. на магнетни дискови. Има команда SAVE на јазикот PARA<имя файла>, кој наложува да се зачува копија од главната меморија на системот на дискот заедно со објекти дефинирани од корисникот. Во овој случај, мемориските области доделени за податоци од операциите VAR, VCTR, ARR не се емитуваат на дискот. Како резултат на тоа, при вчитување на зачуваниот систем од дискот, вредностите на наведените податоци не се дефинирани (тие мора да се утврдат за време на извршувањето на програмата). Во повеќето случаи, ова е оправдано, бидејќи нема потреба да се троши меморијата на дискот за складирање на работни променливи, бафери, итн. Сепак, постојат податоци чии вредности мора да се одредат веднаш по подигнувањето на системот од дискот. Пример е променлива која ја складира брзината на размена на податоци со некој надворешен уред. Кога се префрлате на различен девизен курс, доволно е да ја промените вредноста на оваа променлива без да направите никакви корекции на програмата.

Индикација за процесорот дека вредностите на елементите на некоја структура на податоци треба да се излезат на дискот со помош на командата SAVE е префиксот FIX поставен пред дефиницијата на структурата, на пример.

ПОПРАВИ ВАР БРЗИНА 20 ПОПРАВИ БАЈТИ VCTR TABL

Работата со структури на податоци дефинирани на овој начин не се разликува од работата со структури дефинирани на вообичаен начин.

Наредби за контрола на процесорот

Јазикот PARA има мала група на команди дизајнирани да го контролираат процесорот DSSP, или поточно, емулаторот на процесорот DSSP.

Командата RESTART предизвикува процесорот да се рестартира. Во овој случај, оџакот се брише и се прикажува порака

DSSP верзија XX.XX.XX

Достапно XXXXXW

и процесорот оди во режим на подготвеност за внесување команди. Оваа команда може да биде корисна при дебагирање на програми. Исто така, се извршува кога се појавуваат ситуации на грешка: индексот ги надминува границите на низата, слободната меморија е исцрпена итн.

Командата \G се користи за продолжување на извршувањето на програмата по запирање на недефиниран збор. Ако при извршувањето на процедурата, процесорот наиде на повикување на недефиниран збор, тој издава порака:

застани не знам<слово> .

каде точка е промптот на DSSP процесорот, што сигнализира дека процесорот е во состојба на застој при недефиниран збор. Во овој режим, можете да извршите какви било команди на процесорот, исто како и во нормалниот режим, кога ѕвездичката е прашалник. Постојат два начини да излезете од овој режим - или со извршување на командата \G (тогаш процесорот ќе продолжи да ја извршува прекинатата процедура, прескокнувајќи го недефинираниот збор), или со користење на командата RESTART.

Командата EXEC му кажува на процесорот да изврши процедура чија адреса е на врвот на стекот. За да ја добиете адресата на процедурата, користете ја командата „“ (два апострофи), проследена со името на постапката. На пример, како резултат на извршување на командата

Адресата на процедурата ABS ќе се турка на оџакот. Овие команди ви дозволуваат да пренесете процедура како параметар на друга процедура.

Групата команди за контрола на процесорот ја вклучува веќе споменатата операција SAVE<имя файла>, кој наложува да се зачува копија од системот на дискот, како и команди кои го одредуваат влезниот извор на текстуални информации доставени до влезот на процесорот. Првично, овој извор е тастатурата за прикажување.

Команда LOAD<имя файла>го префрла влезот во датотеката на дискот со наведеното име. Команда PF - ве упатува да внесете команди од баферот на уредувачот на текст. Командата TEXEC пренесува текстуална низа до влезот на процесорот, чии параметри се наведени на оџакот. По извршувањето на командите содржани во наведените извори, внесувањето автоматски се префрла на тастатурата за прикажување.

Речник контролни команди

Текот на влезните команди што го перцепира процесорот може, особено, да содржи команди за дефинирање процедури и податоци, предизвикувајќи компилација во внатрешно претставување и складирање на телото на постапката или распределба на меморија за наведените податоци, како и внесување на името на компајлираната постапка или структура на податоци во речникот DSSP.

Речникот воспоставува кореспонденција помеѓу надворешните (кои се користат во текстот на програмата) имиња и адресите на објектите што одговараат на овие имиња во внатрешната репрезентација. Кога обработува дефиниција за процедура или опис на именуван податок, процесорот го проширува речникот, формирајќи нов запис во речник во него што го содржи името (поточно, првите 7 знаци од името) и адресата на телото на постапката или дескриптор на податоци поврзан со ова име.

При програмирање одозгора надолу, телата на процедурата може да содржат референци за сè уште недефинирани објекти. Во овој случај, во речникот се формираат записи во речник (наслови), означени со знакот на неизвесност. За да ги прикажете сите недефинирани имиња на екранот, користете ја командата UNDEF.

При проширувањето на речникот, можно е да се формираат подречници - именувани збирки на записи од речник. Подречник обично комбинира процедури и структури на податоци поврзани со истата задача. За да се избегне забуна помеѓу имињата на подречниците и другите објекти на програмата, името на подречник мора да започнува со буквата $. Пристапот до подречниците за нивно проширување или употреба може да се отвори и затвори со специјални команди, кои го вклучуваат следново (името $v значи кој било валиден подречник).

GROW $v - израснете го подречник $v, односно, додека не ви биде поинаку наложено, внесете ги имињата на сите компајлирани процедури и податоци во подречник $v;

USE $v - отворен за употреба (за пребарување имиња во него) подречник $v;

SHUT $v - затворете ја можноста за користење на подречник $v;

САМО $v - направи само подречник $v достапен за употреба;

ОТКАЖИ - откажете го САМО последниот.

Има и команда?$, која на екранот ги печати имињата на сите подречник и нивниот статус - дали подречникот е отворен или затворен за пребарување. Подречник чие име е испечатено на врвот секогаш се проширува.

Основните процедури за DSSP сочинуваат под-речник наречен $PRIME, отворен за употреба и проширување стандардно, односно, ако нема команда што дава инструкции за проширување на друг подречник.

Дозволете, на пример, да ја искористите операцијата?$ за да ја испечатите следната состојба на подречниците.

$PRG е отворен

$PRIME е отворен

$EDIT е затворен

$PRIME е отворен

СИСТЕМОТ е затворен

Ова значи дека во моментот подредникот $PRG е отворен за раст и употреба, $PRIME е само за употреба, а $EDIT и SYSTEM не се достапни. Забележете дека подречник може да се состои од неколку делови со исти имиња.

Постојат команди за бришење од речникот одреден сет на записи во речник и, можеби, внатрешни објекти поврзани со нив. Така, командата FORGET $v ги брише сите имиња внесени во речникот (не само подречник $v) од последното извршување на командата GROW $v, заедно со објектите означени со овие имиња, и го откажува растот на $v подречник. Командата PROGRAM $v ги извршува истите дејства како командите ЗАБОРАВИ $v GROW $v кои се извршуваат последователно. Присуството на таква команда на почетокот на која било програма води до фактот дека кога програмата ќе се прекомпајлира, нејзината стара копија ќе биде избришана и ќе се формира подречник за складирање на објекти од новата копија на програмата. На пример, со извршување на операцијата FORGET $PRIME на речникот чија состојба е прикажана погоре, добиваме нова состојба:

$EDIT е затворен

$PRIME е отворен

СИСТЕМОТ е затворен

За време на извршувањето на командата ЗАБОРАВИ, се прикажуваат имињата на деловите што треба да се избришат.

Ве молиме имајте предвид дека името на подредникот SYSTEM не започнува со буквата $. Ова е прифатливо, но води до фактот дека примената на командите FORGET и RPOGRAM на овој подречник не предизвикува никакво дејство (подредикот SYSTEM се чини дека не постои за нив).

Поради фактот што во готовата програма, за огромното мнозинство на процедури, не е потребен пристап по надворешно име, можно е да се отстранат нивните имиња од речникот додека се зачувуваат внатрешните објекти поврзани со нив. Наредбата CLEAR $v ги отстранува сите имиња од сите делови на подречник $v, со исклучок на оние на кои им претходеше во текстот на програмата (кога беа дефинирани) со префиксот:: (две запирки). На пример, како резултат на тоа што процесорот го извршува следниов програмски фрагмент:

:: : X+ Y !+ X ;

CLEAR $EXAM Во подречник $EXAM ќе останат само имињата X и X+, записот во речникот Y ќе биде отстранет (иако ќе остане променливата што одговара на зборот Y во внатрешната репрезентација).

I/O команди

Главното средство за интеракција на корисникот со DSSP е терминалот, кој обично е дисплеј со катодни зраци со тастатура. Од терминалот се врши почетно внесување, уредување и дебагирање на програмите, подготовка на податоци и целокупно управување со системот. Програмите и податоците, како и самиот DSSP, се зачувуваат како датотеки на дискови и може да се испечатат на печатач. За контрола на влезот/излезот, множеството основни процедури за DSSP ги содржи алатките опишани подолу.

Програмирањето на работата на терминалот е обезбедено со команди за внесување и излез на броеви, поединечни знаци и низи од знаци (жици), како и некои дополнителни команди.

Командата TIB (Terminal Input Byte) иницира циклус кој чека да се притисне копче на терминалната тастатура. Кога ќе се притисне копче, 8-битниот код од соодветниот знак се турка на оџакот како најмалку значаен бајт од горниот дел, а највисоките 3 бајти содржат нули. На екранот се прикажува копија од знакот внесен на овој начин. Постои и команда TRB (Terminal Read Byte), која се разликува од TIB по тоа што испраќањето на кодот на внесената буква до стекот не е придружено со прикажување на оваа буква на екранот.

Командата TIN (Terminal Input Number) иницира циклус на внесување број во оџакот и прикажување на број напишан од тастатурата. Бројот што го внесувате мора да биде низа од цифри што може да започнуваат со знак минус и да завршуваат со . Во зависност од поставениот режим на влез/излез, процесорот ги перцепира броевите како хексадецимални, децимални, октални или бинарни. Ако хексадецимален број започнува со цифра означена со буква, тогаш пред неа се додава цифрата 0. Внесениот број се претвора во комплемент код на бинарни два, кој се турка на оџакот како цел број вредност на 32-битен долг збор , т.е. со отсечни битови лоцирани лево од најзначајниот бит со тежина од 2 до јачина од 31.

Секоја команда TIN внесува еден број. Ако треба да внесете низа од броеви во една линија, тие мора да се одделат со притискање на копчето , а командата TIN мора повторно да се изврши за да се внесе секој број во програмата.

Секвенца која содржи n знаци внесени од тастатурата се внесува во меморијата на компјутерот во форма на n бајти, лоцирани на адреси кои се зголемуваат последователно, почнувајќи со адреса a, со помош на командата TIS (Terminal Input String), пред која адресата a и бројот од знаци n се туркаат на оџакот . Нека, на пример, се декларира вектор од бајти X со доволна должина. Треба да внесете 9 знаци, доделувајќи ги нивните вредности на елементите на овој вектор, почнувајќи од нултиот елемент:

Слично на тоа, користејќи ја командата TOS, се одредува излезот од низа од n бајти-литри со почетна адреса a:

Излезот до терминалот на текстуалните елементи директно вклучени во програмата е обезбеден со дизајнот

."<текст>"

На пример, за да може текстот ENTER OPTION NUMBER да се појави на екранот при извршување на одреден програмски фрагмент, фрагментот мора да го содржи записот „ENTER OPTION NUMBER“.

Командата TON (Terminal Output Number) го прикажува бројот земен од долниот дел на стекот, а должината на полето за излез мора да биде наведена на врвот. Излезниот број е порамнет на десниот раб на полето, слободните позиции од левата страна се пополнуваат со празни места и ако должината на бројот ја надминува одредената должина на полето, тогаш се случува отсекување лево. Во децималниот режим В/И, негативните броеви започнуваат со знакот минус.

Командата TOB (бајт за излез на терминал) го печати знакот чиј код е одреден со нискиот бајт на горниот дел од стекот. Длабочината на оџакот е намалена за 1.

Исто така, постојат команди кои директно го контролираат курсорот на екранот:

CR - одете на почетокот на нова линија,

SP - простор, односно поместување на една позиција надесно.

Командата BELL предизвикува краток звучен сигнал („ѕвонче“).

Понекогаш, кога се комуницира со терминал, потребно е да се провери дали некое копче е веќе притиснато и дали екранот веќе ја обработил претходната излезна команда. Ова може да се направи со командите TTI (Terminal Test Input) и TTO (Terminal Test Output), кои оставаат 1 на оџакот ако се случи наведениот настан, а 0 во спротивно.

Излезните команди на печатачот се слични на излезните команди на терминалот и се засноваат на слична мнемоника во која буквите LP (Line Printer) се или заменети TO или се додадени како водечки знаци. На пример, LPCR - премин кон почеток на нова линија, LPSP - празно место, LPN - излез на број од подвертекс во полето одредено со темето, LPB - излез на знак, LPS - излез на низа знаци . Исто така, постои командата [N] LPT, која ја поместува главата за печатење во позиција N од линијата што треба да се печати и командата LPFF, која храни лист хартија. За да се печати експлицитен текст, погодно е да се користи буквален текст и командата LPS, на пример:

„ТАБЕЛА НА ФУНКЦИСКИ ВРЕДНОСТИ“ LPS

Ракување со прекини и исклучоци

Кога програмирате периферни уреди, станува неопходно да се справувате со прекини. Во DSSP оваа обработка е програмирана на следниов начин. Програмата дизајнирана да се справи со прекинот е редовна DSSP процедура, на чија дефиниција и претходи префиксот INT, на пример INT: A !1+ I ; Префиксот INT осигурува дека состојбата на процесорот е зачувана за време на прекин и вратена кога прекинот се обработува.

За да поврзете програма за обработка со одреден прекин, користете ја командата LINK:

<адрес вектора>ЛИНК<имя процедуры>кога се извршува, повик до процедурата за справување со прекини се снима долж соодветниот вектор. Командата LINK може да изврши и статичко поврзување на процедура со прекин, кој се јавува во моментот на компилација на програмата, и динамично поврзување, за време на извршувањето на програмата.

Прекинот на процесорот е начин на кој системот може да биде известен за настан што се случил во надворешниот свет. Во програмата може да се појават и настани кои бараат итна обработка. Тие се нарекуваат исклучителни ситуации. Примери за такви ситуации: делење со нула, грешка во комуникацијата со уредот, крај на влезната датотека итн.

Во DSSP, ситуациите со исклучок се снимаат со користење на прекини на команди. Командниот прекин е именувана операција за повикување постапка за одговор и се декларира на следниов начин:

СТАПИЦА<имя вызова> <конечная реакция>

На пример:

Стапица S1 "Ситуација S1."

Во првиот случај, конечната реакција на прекинот S е постапката X, во вториот, кога ќе дојде до прекин S1, на терминалот ќе се прикаже следнава порака: Ситуација S1.

Програма чие извршување може да предизвика прекин може да постави свој одговор на неа користејќи ја командата за пресретнување. DSSP обезбедува два типа на пресретнување: ON и EON. Командите за пресретнување може да се користат само во рамките на процедурите и имаат формат:

НА<имя прерывания> <реакция>

ЕОН<имя прерывания> <реакция>На пример:

: A ... ВКЛУЧЕНО S "Прекини S" ... ;

: A1 ... EON S1 ABC ... ;

ON и EON поставуваат различни типови на реакции. Ако е одредена нова реакција со командата ON, тогаш кога ќе дојде до прекин, се извршува процедурата за реакција, по што прекинатата програма продолжува да работи. Ако реакцијата е специфицирана со инструкцијата EON, тогаш прво стекот на операнд ја добива длабочината што ја имал во моментот на извршување на инструкцијата EON, потоа реакцијата се извршува, а по завршувањето, извршувањето на постапката во која EON инструкција се користи веднаш запира.

Ајде да погледнеме примери. Постапката М внесува букви од терминалната тастатура и проверува дали е број. Ако внесениот знак не е цифра, прекинот ND се зголемува. Стапица НД „Не е бројка“. : М РП М1 ; : M1 TRB [B] C #0< C2 #9 >&0 IF+ ND [B] TOB ;

Конечната реакција на прекин на НД е пораката: Не е број.

Ако M се повика од постапката P1, која има свој одговор на прекинот ND: P1 ON ND PR1 M ; : PR1 [B] CR „Грешка“. D #0 [#0] ; тогаш кога ќе се внесе недигитален знак, прекинот ND ќе се обработи од програмата за реакција PR1 од типот ON, што ќе предизвика пораката да се издаде на нова линија: Грешка. Внесениот знак ќе биде заменет со знакот 0, по што М ќе продолжи да работи.

Ако M се повика од постапката P2: P2 EON ND PR2 M ; : PR2 CR "Грешка. Крај на внесување." ; тогаш кога ќе се внесе недигитален знак, прекинот ND ќе се обработи од програмата за реакција од типот PR2 EON, што ќе предизвика пораката да се издаде на нова линија: Грешка. Крај на влезот., по што P2 ќе излезе. Стакот на операндот ќе биде празен.

Доколку е потребно, прекинот може повторно да се подигне во програмата за реакција, со што ќе се прошири на програмите на повисоко ниво. Во овој случај, или програмата наведена во командата за пресретнување во процедурата за приложување или конечната реакција ќе се справи со прекинот. На пример, ако го измените PR2 на следниов начин: : PR2 CR "Грешка. Крај на внесување." Н.Д.; тогаш пораката прикажана на терминалот ќе биде вака: Грешка. Крај на влезот. Не е бројка.

DSSP има неколку вградени командни прекини, чиј одговор може да се обезбеди во корисничките програми.