БАЗОВЫЙ НАБОР КОМАНД ДССП ~~~~~~~~~~~~~~~~~~~~~~~~~ Обозначения: Sq - вершина стека, т.е. S(q,31:0); q - указатель стека, q>=0; q+ - равносильно q:=q+1; q- - равносильно q:=q-1; a - целое число; m(a,7:0) - байт главной памяти с адресом a; m(a,15:0) - 16-битная ячейка главной памяти с адресом a; m(a,31:0) - 32-битная ячейка главной памяти с адресом a; X, Y - имена переменных, векторов, массивов; t, u - вспомогательные 32-битные переменные; j, k, l, m, n - целые положительные числа; P, P1, ..., Pn - процедуры; A0, A1, ..., An - процедуры, засылающие в стек по одному операнду. --------------------------------------------------------------------------- Команда Содержание команды Примеры --------------------------------------------------------------------------- Команды, касающиеся процедур и именуемых данных : <имя> <тело> ; Создать процедуру <имя>, за- : NEG [a] 0 E2 - [-a] ; данную цепочкой команд <тело> <имя процедуры> Выполнить заданную процедуру [5] NEG [-5] DEFINE? <имя> Засылает в стек 0, если слово DEFINE? NEG [1] <имя> не определено, иначе 1. DEFINE? XXX [0] Может использоваться совместно с процедурами %IF, %FI: q+; Sq:=<1 или 0>; <целое число> Заслать в стек дополнительный [] -1 [FFFFFFFF] код данного числа: [] 5 [5] q+; Sq:=<доп. код числа>; #<литера> Заслать в стек код названной [] #A [65] литеры: q+; Sq:=0; Sq(7:0):=<код литеры>; "<текст>" Записать текст в главную па- [] "Код литеры" [a,10] мять в виде цепочки байтов-ли- тер. Заслать в стек адрес пер- вого байта цепочки a и длину n: q+; Sq:=a; q+; Sq:=n; В памяти вслед за последней литерой текста записывается нулевой байт (в длине не учи- тывается) [N] VALUE <имя> определить числовую константу [38] VALUE X с именем <имя>. TEXT <имя> "<текст>" Определить текстовую константу TEXT T "Стоп!" с именем <имя>. При употребле- нии <имя> в стек засылается [] T [a,5] начальный адрес и длина текста TEXT <имя> ."<текст>" Определить текстовую константу TEXT T ."Стоп!" с именем <имя>. При употребле- нии <имя> весь <текст> выводится на экран BYTE В последующей команде объявле- BYTE VAR CHAR ния данного элементом данных [8] BYTE VCTR X [] (базовым форматом) считать BYTE CNST A 60 32 ; 8-битный байт WORD В последующей команде объявле- WORD VAR I ния данного элементом данных 10 WORD VCTR NX (базовым форматом) считать 16-битное слово LONG В последующей команде объявле- LONG VAR TIME ния данного элементом данных 100 LONG VCTR BUFF (базовым форматом) считать 32-битное длинное слово ACT Объявляемое далее данное счи- ACT VAR REF тать "выполняемым", то есть '' P0 ! REF при обращении к элементу данных REF [выполняется P0] будет выполнена присвоенная ему процедура VAR <имя> Создать переменную <имя> WORD VAR X указанного формата. ! <имя переменной> Присвоить названной переменной [7] ! X [] взятое из стека значение: [X=7] X:=Sq; q-; <имя переменной> Заслать в стек значение [] X [7] названной переменной: q+; Sq:=X; [n] VCTR <имя> Создать вектор <имя>(0:n) [9] BYTE VCTR X [] из n+1 компонент [X(0:9,7:0)] указанного формата. NOIND Программное прерывание, вызываемое при обращении к векторам и массивам с недопустимым индексом. Конечная реакция - выдача сообщения и перезапуск системы. CNST <имя> A0 Создать вектор констант WORD CNST ГОДЫ 1799 A1 ... An ; <имя>(0:n) 1825 1837 ; указанного формата. <формат> DATA <имя> Определить данное указанного BYTE DATA X формата. WORD 5 VECTOR DATA WW <бф> [N] VECTOR Указание процедуре DATA BYTE 3 VECTOR DATA Y построить составной формат LONG 9 VECTOR 2 VECTOR DATA X "вектор" из N+1 элементов формата <бф> [a,j] ! <имя> Присвоить указываемой вершиной [25,3] ! X [] стека j-й компоненте вектора [X(3)=25] <имя> значение a подвершины, удалив из стека j и a: t:=Sq; q-; X(t):=Sq; q-; [j] <имя вектора> Заслать в стек значение [3] ROW [25] указываемой вершиной компоненты названного вектора: Sq:=X(Sq); [j,k,...,l,n] Создать n-мерный массив [4,4,2] WORD ARR MTRX [] ARR <имя> <имя>(0:j,0:k,...,0:l) [4,4,4,3] BYTE ARR CUB [] [a,i,...,m] ! <имя> Присвоить указываемой индек- [7,3,2,5,4] ! X [] сами (i,...,m) компоненте [X(3,2,5,4)=7] массива <имя> значение a, удалив из стека a и индексы [i,...,m] <имя> Заслать в стек значение [3,2,5,4] X [7] указываемой индексами компо- ненты массива <имя> FIX Объявляемые далее данные раз- FIX 7 BYTE VCTR N местить в области, сохраняемой и загружаемой вместе с кодом процедур то есть после выполнения процедуры SAVE и последующей новой загрузке системы FIX-данные будут иметь те же значения, что и на момент SAVE EMPTY В последующей команде объяв- EMPTY BYTE VAR B ления данного не отводить па- EMPTY 25 WORD VCTR TAR мять для размещения элементов данных [a] EQU <имя> Разместить определенные с 100 EQU B EMPTY данные <имя>, начиная 3 ' N EQU TAR с адреса a, удалив a из стека ADDROF N EQU TAR [a,''data] EQU' Разместить определенные с 100 '' B EQU' EMPTY данные, заданные адресом 3 ' N '' TAR EQU' тела данного ''data, ADDROF N '' TAR EQU' с адреса a, удалив a и ''data из стека ADDROF <имя> Занести в стек адрес области ADDROF N [a] памяти, где размещается данное <имя>. [''data] ADDROF' Занести в стек адрес области '' N ADDROF' [a] памяти, где размещается данное заданное адресом своего тела ''data. DIM? <имя> Занести в стек количество эле- WORD VAR X ментов базового формата DIM? X [1] в данном <имя>. 5 LONG VCTR Y DIM? Y [6] SIZE? <имя> Занести в стек размер в байтах WORD VAR X элемента базового формата в SIZE? X [2] данном <имя>. 5 LONG VCTR Y SIZE? Y [4] CAP? <имя> Занести в стек размер в байтах WORD VAR X всей области данных <имя>. CAP? X [2] 5 STRING Y CAP? Y [8] [''data] CAP?' Занести в стек объем области '' N CAP?' [a] памяти, где размещается данное заданное адресом своего тела ''data. TRAP <имя> <проце- Объявить командное прерывание TRAP OV REACT дура реагирования> <имя>, сопоставив ему процеду- TRAP SE ."Стек пуст" ру конечного реагирования ON <имя> <проце- Подменить реагирование, уста- ON OV ."OVERFLOW" дура реагирования> новленное для прерывания <имя> EON <имя> <проце- Подменить реагирование, уста- EON OV NOP дура реагирования> новленное для командного пре- рывания <имя>, реагированием с предварительным выходом из тела процедуры, содержащей EON Команды работы с данными STRING описаны в файле STRING.DOC Команды выполнения процедур по условию и в циклах IF- P Выполнение по минусу: [5,0] IF- 1+ [5] t:=Sq; q-; if t<0 then P; [5,-2] IF- 1+ [6] IF0 P Выполнение по нулю: [5,0] IF0 1+ [6] t:=Sq; q-; if t=0 then P; IF+ P Выполнение по плюсу: [5,0] IF+ D [5] t:=Sq; q-; if t>0 then P; BR- P1 P2 Выбор по минусу: [5,0] BR- 1+ 1- [4] t:=Sq; q-; [5,-2] BR- 1+ 1- [6] if t<0 then P1 else P2; BR0 P1 P2 Выбор по нулю: [5,0] BR0 C D [5,5] t:=Sq; q-; [5,3] BR0 C D [] if t=0 then P1 else P2; BR+ P1 P2 Выбор по плюсу: [5] BR+ 1 0 [1] t:=Sq; q-; [-5] BR+ 1 0 [0] if t>0 then P1 else P2; BRS P1 P2 P3 Выбор по знаку: [4] BRS -1 0 1 [1] t:=Sq; q-; [-4] BRS -1 0 1 [-1] if t<0 then P1 else if t=0 then P2 else P3; BR A1 P1 A2 P2 ... Выбор одной из N процедур: ... AJ PJ ... t:=Sq; q-; A1; if Sq=t then [5,7] BR 3 ABS ... ELSE PN (q-; P1) else (q-; A2; if Sq=t 7 NEG ELSE D [-5] then (q-; P2) else ... ... else (q-; PN) RP P Выполнять P снова и снова: [0] RP 1+ [1] [2] ... P; P; P; ... [t] DO P Выполнить P t раз: [0,3] DO 1- [-3] t:=Sq; q-; P; P; P; ... (t раз) EX Выход из цикла [] EX [] EX- Выход из цикла по минусу: : EX- [t] IF- EX [] ; EX0 Выход из цикла по нулю: : EX0 [t] IF0 EX [] ; EX+ Выход из цикла по плюсу: : EX+ [t] IF+ EX [] ; NOP Никакой операции [] NOP [] Команды манипулирования стеком D Удалить из стека один элемент: [2,4] D [2] q-; DD Удалить из стека два элемента: [7,5] DD [] q-; q-; DDD Удалить из стека три элемента: [7,5,3] DDD [] q-; q-; q-; DDDD Удалить из стека 4 элемента: [7,5,2,2] DDDD [] q-; q-; q-; q-; DS Удалить из стека все элементы: [...,3,9] DS [] q:=0; C Скопировать вершину стека: [5] C [5,5] q+; Sq:=S(q-1); C2 Скопировать подвершину стека: [7,5] C2 [7,5,7] q+; Sq:=S(q-2); C3 Скопировать элемент стека с [7,5,5] C3 [7,5,5,7] глубины 3: q+; Sq:=S(q-3); C4 Скопировать элемент стека с [7,5,3,5] C4 глубины 4: [7,5,3,5,7] q+; Sq:=S(q-4); CT Скопировать элемент, указы- [9,4,1,3] CT ваемый вершиной: [9,4,1,9] t:=Sq; Sq:=S(q-t); E2 Обменять с глубины 2: [8,5] Е2 [5,8] Sq:=:S(q-1); E3 Обменять с глубины 3: [7,5,3] E3 [3,5,7] Sq:=:S(q-2); E4 Обменять с глубины 4: [7,5,5,3] E4 Sq:=:S(q-3); [3,5,5,7] ET Обменять с глубины, указы- [9,4,1,3] ET [1,4,9] ваемой вершиной: t:=Sq; q-; Sq:=:S(q-t+1); T0 Присвоить вершине стека 0: [5] T0 [0] Sq:=0; T1 Присвоить вершине стека 1: [5] T1 [1] Sq:=1; 1+ Прибавить 1: [5] 1+ [6] Sq:=Sq+1; 1- Вычесть 1: [5] 1- [4] Sq:=Sq-1; 2+ Прибавить 2: [5] 2+ [7] Sq:=Sq+2; 2- Вычесть 2: [5] 2- [3] Sq:=Sq-2; 3+ Прибавить 3: [5] 3+ [8] Sq:=Sq+3; 3- Вычесть 3: [5] 3- [2] Sq:=Sq-3; 4+ Прибавить 4: [5] 4+ [9] Sq:=Sq+4; 4- Вычесть 4: [5] 4- [1] Sq:=Sq-4; + Сложить: [2,3] + [5] t:=Sq; q-; Sq:=Sq+t; - Вычесть: [3,5] - [-2] t:=Sq; q-; Sq:=Sq-t; * Перемножить: [2,3] * [6] t:=Sq; q-; Sq:=Sq*t; / Поделить нацело, сохранив [-7,3] / [-2,-1] остаток: [7,-3] / [-2,1] t:=Sq; q-; u:=Sq; Sq:=цел(u/t); q+; Sq:=u-S(q-1)*t; NEG Изменить знак: [-5] NEG [5] Sq:=-Sq; [5] NEG [-5] ABS Взять по абсолютной величине: [-5] ABS [5] : ABS [a] C IF- NEG [|a|] ; SGN Взять знак: [-5] SGN [-1] : SGN [a] BRS -1 0 1 [-1/0/1] ; [0] SGN [0] [5] SGN [1] < Меньше: [3,5] < [1] : < [a,b] - BR- 1 0 [1/0] ; [-3,-5] < [0] = Равно: [3,5] = [0] : = [a,b] - BR0 1 0 [1/0] ; [5,5] = [1] > Больше: [3,5] > [0] : > [a,b] - BR+ 1 0 [1/0] ; [-3,-5] > [1] MIN Взять меньшее: [5,-8] MIN [-8] t:=Sq; q-; Sq:=min(t,Sq); MAX Взять большее: [5,-8] MIN [5] t:=Sq; q-; Sq:=max(t,Sq); [n,a,b] SEG Проверка попадания значения n [5,0,9] SEG [1] в сегмент [a,b]; параметры [5,6,9] SEG [0] удаляются, в стек засылается признак 0 или 1 NOT НЕ (отрицание): [-5] NOT [0] : NOT [a] BR0 1 0 [1/0] ; [0] NOT [1] INV Побитное НЕ (инверсия): [0000000F] INV [FFFFFFF0] Sq:=INV(Sq); [0] INV [-1] & Побитное И (конъюнкция): [FFFFFFF5,0F] & [5] t:=Sq; q-; Sq:=Sq&t; &0 Побитное ИЛИ (дизъюнкция, [F0F0,00FF] &0 [F0FF] "коньюнкция нулей"): t:=Sq; q-; Sq:=Sq&0t; '+' Побитное сложение [F0F0,00FF] '+' [F00F] (неэквивалентность): t:=Sq; q-; Sq:=Sq'+'t; SHL Сдвиг влево: [F00F] SHL [1E01E] Sq(31:0):=Sq(30:0)0; SHR Сдвиг вправо: [FFFFF01Е] SHR [7FFFF80F] Sq(31:0):=0Sq(31:1); SHT Сдвиг по вершине: [1,4] SHT [16] t:=Sq; q-; Sq:=Sq*2**t; [8,-2] SHT [2] SWB Перестановка байтов: [12340EDC] SWB [1234DC0E] Sq(15:8):=:Sq(7:0); SWW Перестановка слов: [A234B678] SWW [B678A234] Sq(31:16):=:Sq(15:0); LO Выделение младшего слова: [A234B678] LO [B678] Sq(31:16):=0; HI Выделение старшего слова: [A234B678] HI [A234] Sq(15:0):=Sq(31:16); Sq(31:16):=0; SETHI Присваивание старшему слову [A234B678,2CDEF] SETHI подвершины стека значения [CDEFB678] младшего слова вершины стека t:=Sq(15:0); q-; Sq(31:16):=t; SETLO Присваивание младшему слову [A234B678,2CDEF] SETLO подвершины стека значения [A234CDEF] младшего слова вершины стека t:=Sq(15:0); q-; Sq(15:0):=t; SGX Расширение знака младшего слова: [1FFFF] SGX [FFFFFFFF] for i:=16 to 31 do [F123] SGX [FFFFF123] Sq(i):=Sq(15); [12345678] SGX [5678] Команды манипулирования адресами-указателями ' X Заслать в стек адрес-указа- [] ' X2 [<адр.X2>] тель переменной или компоненты [5] ' VR [<адр.VR(5)>] массива. q+; Sq:=<адрес X>; @L Заменить в стеке адрес [a] @L [m(a,31:0)] значением 32-битного слова Sq:=m(Sq,31:0) @ Заменить в стеке адрес [a] @ [m(a,15:0)] значением 16-битного слова t:=Sq; Sq:=0; Sq(15:0):=m(t,15:0) @B Заменить в стеке адрес [a] @B [m(a,7:0)] значением байта: t:=Sq; Sq:=0; Sq(7:0):=m(t,7:0) !TL Записать 32-битное слово из [35784,80] !TL [] подвершины по адресу, взятому [m(80):=35784] с вершины: t:=Sq; q-; m(t):=Sq; q-; !T Записать младшее 16-битное [1234,10] !T [] слово подвершины по адресу, [m(10):=1234] взятому с вершины: t:=Sq; q-; m(t,15:0):=Sq(15:0); q-; !TB Записать младший байт под- [250,83] !TB [] вершины по адресу, взятому с [m(83):=250] вершины: t:=Sq; q-; m(t,7:0):=Sq(7:0); q-; '' <имя> Заслать в стек адрес-указатель [] '' P [<адр P>] тела процедуры <имя>: q+; Sq:=<адрес>; EXEC Выполнить процедуру, указыва- [5] '' 2+ EXEC [7] емую вершиной стека: t:=Sq; q-; exec(t); Команды манипулирования данными в главной памяти !0 <имя> Обнулить переменную <имя> !0 X или компоненту массива <имя> [X:=0] !1 <имя> Присвоить 1 переменной <имя> !1 X или компоненте массива <имя> [X:=1] !1+ <имя> Прибавить 1 к переменной <имя> !1+ X или компоненте массива <имя> [X:=X+1] !1- <имя> Вычесть 1 из переменной <имя> !1- X или компоненты массива <имя> [X:=X-1] !+ <имя> Прибавить значение вершины [7] !+ X [] стека к переменной <имя> [X:=X+7] или компоненте массива <имя> <имя>:=<имя>+Sq; q-; !- <имя> Вычесть значение вершины [7] !- X [] стека из переменной <имя> [X:=X-7] или компоненты массива <имя> <имя>:=<имя>-Sq; q-; [a,j] !BI0 Присвоить 0 биту j по адресу a: [2200,5] !BI0 [] t:=Sq; q-; a:=Sq; q-; m(a,t):=0; [m(2200,5):=0] [a,j] !BI1 Присвоить 1 биту j по адресу a: [2200,5] !BI0 [] t:=Sq; q-; a:=Sq; q-; m(a,t):=1; [m(2200,5):=1] [b,a,j] !BI Присвоить значение b(0) биту [1,2200,5] !BI [] j по адресу a: [m(2200,5):=1] t:=Sq; q-; a:=Sq; q-; m(a,t):=Sq(0); q-; [a,j] @BI Заменить адрес значением бита: [33,5] @BI [1/0] t:=Sq; q-; a:=Sq; Sq:=m(Sq,t); !!! <имя> Присвоить всем элементам струк- [9] !!! X [] туры данных <имя> значение вершины стека [w,a,n] !!!M Присвоить n 16-битным словам, [7,200,32] !!!M [] начиная с адреса a, значение w [b,a,n] !!!MB Присвоить n байтам, начиная с [4,100,56] !!!MB [] адреса a, значение b [a,n,a1] !SB Переписать n байтов, начиная с [50,100,51] !SB [] адреса a, в область памяти, на- чиная с адреса a1; допускаются перекрытия [b,a,n] SRCHB Поиск байта с заданным значени- [9,200,25] SRCHB [20] ем b среди n байтов, начиная с [0,93,-8] SRCHB [-4] адреса a, при n<0 по убывающим [0,93,-8] SRCHB [-8] адресам. Возвращает смещение со [не найдено] знаком относительно a; в случае неуспеха - n Команды управления процессором ?I Выдать на терминал дату ге- ?I нерации системы и количество слов свободной памяти B2 Установить режим двоичного B2 ввода/вывода B8 Установить режим восьме- B8 ричного ввода/вывода B10 Установить режим десятичного B10 ввода/вывода B16 Установить режим шестнадца- B16 теричного ввода/вывода [a,l] TEXEC Передать строку с указанными [25012,10] TEXEC [] параметрами на вход процессора "1 . D" TEXEC [] удалив из стека a и l [ 1 ] [b] %IF ... %FI Если b=0, то заключенное между 0 %IF 25 %FI [] %IF и %FI игнорируется; 1 %IF 25 %FI [25] b удаляется из стека; Допускается вложенность. CON Включить режим выдачи входной CON строки на экран COFF Выключить режим выдачи входной COFF строки на экран LOAD <имя> Выдать содержимое файла <имя> на LOAD TEST вход процессора SAVE <имя> <строка> Скопировать систему в ее теку- SAVE DSSPN CR ?$ щем состоянии на диск в файл <имя>. <Строка> будет выполнена процес- сором при запуске сохраненной системы. RESTART Очистка стека, перезапуск про- RESTART цессора. Вызывается также при одновременном нажатии клавиш Ctrl+C (разрешение/запрещение на перезапуск по нажатию данных клавиш выполняется процедурами ETXON, ETXOFF); ETXON разрешить перезапуск (RESTART) ETXON по нажатию клавиш Ctrl+C ETXOFF запретить перезапуск (RESTART) ETXOFF по нажатию клавиш Ctrl+C BYE Выход из ДССП, возврат в DOS. BYE Вызывается также при одновременном нажатии клавиш Alt+X; Команды управления словарем GROW $<имя> Открыть для наращивания GROW $PRIME подсловарь $<имя> FORGET $<имя> Удалить нарощенное, начиная FORGET $PRIME с последнего GROW $<имя> PROGRAM $<ИМЯ> Открыть для наращивания PROGRAM $SORT подсловарь $<ИМЯ>, удалив в нем нарощенное от предыду- щего открытия USE $<имя> Открыть для использования USE $PROBL подсловарь $<имя> SHUT $<имя> Сделать подсловапрь $<имя> не- SHUT $PROBL достуным для использования ONLY $<имя> Сделать доступным для использо- ONLY $PROBL вания только подсловарь $<имя> CANCEL Отменить последнее ONLY CANCEL ?$ Выдать на экран терминала дан- ?$ ные о текущем состоянии словаря UNDEF Выдать на экран терминала UNDEF неопределенные слова :: Зафиксировать в словаре :: VAR БАЗА определяемое далее слово :: : **2 C * ; CLEAR $<ИМЯ> В подсловаре $<ИМЯ> произ- CLEAR $SORT вести удаление незафиксиро- ванных слов Команды взаимодействия с терминалом TIN Ввод числа с клавиатуры тер- [] TIN [-487] минала в стек с отображением [-487] на экран; q+; Sq:=<цел.число>; displ(Sq); TIB Ввод байта-литеры с клавиа- [] TIB [65] туры терминала в стек с [A] отображением на экран; q+; Sq:=0; Sq(7:0):=<код литеры>; displ(<литера>); TRB Ввод байта-литеры с клавиа- [] TRB [95] туры терминала в стек без отображения на экран; q+; Sq:=0; Sq(7:0):=<код литеры>; ); q-; . Отобразить на экран терминала [25] . [25] число, содержащееся в вершине стека: displ(Sq); .. Отобразить на экран терминала [4,3,5] .. [4,3,5] содержимое элементов стека, [ 4 3 5] начиная с самого нижнего элемента: displ(S(1),S(2),...,Sq); ."<текст>" Отобразить <текст> на экран [] ."YES" [] терминала: displ(<текст>); CR Перевести курсор в начало [] CR [] очередной строки SP Вывести пробел на экран [] SP [] BELL Выдать на терминал звуковой [] BELL [] сигнал [a,n] TIS Ввод с клавиатуры терминала n [473,20] TIS [] литер-байтов в главную память, начиная с адреса a (окончание ввода - <вк>) LTIS Заслать в стек количество бай- [] LTIS [15] тов, введенных последней командой TIS (без учета кода конца строки) [a,n] TOS Вывод на экран терминала n ли- [473,15] TOS [] тер-байтов из главной памяти, начиная с адреса a Команды управления памятью Подробное описание команд управления памятью содержится в файле MEMORY.DOC Команды управления файлами и работы с диском Процедуры для работы с директориями DIR Вывод на терминал текущего DIR справочника диска PATH <образец> Задание образца и/или дирек- PATH *.DSP тория для поиска файлов PATH A:TURBO.* процедурой DIR. Если задан PATH \CAT1\*.* директорий, то обязательно надо задать образец; CD <директорий> Установка текущего устройст- CD C:\ ва и/или директория. Если CD C:\DOC задан только директорий, то CD \CAT1 устройство остается прежним, CD A: если задано только устройст- CD ..\CAT2 во, то восстанавливается последний текущий директорий на данном устройстве. Если каталог не найден, то возбуждается прерывание EXERR [a,l] CDIR [] Аналогично CD, но имя директо- "\CAT1" CDIR рия/устройства задается в виде "A:" CDIR текстовой строки (адрес,длина) Процедуры манипулирования файлами TYPE <имя> Вывод на терминал текста из TYPE A:\MENU\S.TXT файла <имя> TYPE MYPROG CRTF <имя> Создать файл с указанным именем [] CRTF MYPROG [] [] CRTF A:\MENU\S.TXT [] [A,L] CREATE [] Создать файл с именем, за- [] "MYPR.ABC" CREATE [] данным строкой байтов. [] DELF <имя> [] Удалить указанный файл. [] DELF A:\MENU\S.TXT [] [A,L] DELETE [] Удалить файл с именем, заданным "MYPROG" DELETE строкой байтов. [] RENF <имя2> <имя> [] Изменить имя у файла <имя> RENF NEWNAME OLDNAME на имя <имя2>. RENF A:A.TXT B:A.TXT [A2,L2,A,L] RENAME [] Изменить имя у файла с "NN.ABC" "OL.ABC" RENAME именем, заданным строкой байтов [A,L] на имя [A2,L2]. [] LPF <имя> [] Распечатаь файл <имя> на принтере. LPF MYFILE Процедуры работы с каналами [] CHANNEL <имя> [] Создать канал с указанным CHANNEL A именем. [A,L] CONNECT <имя> [] Связать канал <имя> с "MYFILE" CONNECT A файлом, имя которого за- дано строкой байтов. Файл по умолчанию получает расширение DSP и считается находящимся в текущем директории на текущем диске. Следующие имена файлов зарезервированы для стандартных устройств (СУ): AUX - для СУ асинхронной связи CON - для СУ ввода/вывода: при вводе клавиатура, при выводе - экран; COM1-COM3 - устройства, присоеди- няемые к асинхронным после- довательным коммуникационным портам 1-3; LPT1-LPT3 - устройства, присоеди- няемые к параллельным портам 1-3 (обычно принтеры); NUL - "пустое" устройство, все операции ввода-вывода для этого устройства игнори- руются; PRN - для системного устройства печати [] FNPRS <имя> [a,l] получить имя и расширение FNPRS A файла, связанного с данным ["MYFILE.DSP"] каналом (физически в памяти имя расположено сразу за именем каталога для данного файла - см. процедуру FPPRS) [] FPPRS <имя> [a,l] получить устройство и каталог FPPRS A файла, связанного с данным ["C:\MYDIR\"] каналом (физически в памяти каталог расположен перед именем файла для данного канала - см. процедуру FNPPRS) [] FFPRS <имя> [a,l] получить полное имя FFPRS A файла, связанного с данным ["C:\MYDIR\FILE.A"] каналом. [] CRT <канал> [] Создание файла, связанного "AAA.EXE" CONNECT CH с данным каналом. CRT CH [] DEL <канал> [] Удаление файла, связанного DEL CH с данным каналом. [A,L new] REN <канал> [] Переименование файла, связан- "NEW.EXE" REN CH ного с данным каналом. [] OPEN <имя> [] Открыть канал <имя>. OPEN A [] WOPEN <канал> [] Открытие канала с обнулением WOPEN CH его длины данных. Если файла нет, то он создается. [] CLOSE <имя> [] Закрыть канал <имя>. CLOSE A [B] OB <имя> [] Вывести байт по каналу <имя>. [b] OB A [] [] IB <имя> [B] Ввести байт по каналу <имя>. [] IB A [b] [W] OW <имя> [] Вывести слово по каналу <имя>. [w] OW A [] [] IW <имя> [W] Ввести слово по каналу <имя>. [] IW A [w] [W] OL <имя> [] Вывести двойное слово по каналу <имя>. [l] OL A [] [] IL <имя> [W] Ввести двойное слово по каналу <имя>. [] IL A [l] [A,L] OS <имя> [] Вывести строку байтов по "sting" OS A [] каналу <имя>. [A,L] IS <имя> [] Ввести строку байтов по [A,L] IS A [] каналу <имя>. [] POS <имя> [BTC] Поместить в стек значение [] POS A [pos] указателя канала <имя> (номер текущего байта) [N] SPOS <имя> [] Установить значение указателя [100] SPOS A [] канала <имя> равным N. [] LENB <имя> [LENB] Поместить в стек длину [] LENB A [lenb] данных файла [] SLENB <имя> [] Установить длину данных [] SLENB A [] файла равной текущему зна- чению указателя (все байты начиная с текущего отсекаются) Команды вывода на принтер LPN Вывод на принтер числа из под- [5432,6] LPN [] вершины стека в поле, длина которого задана вершиной: t:=Sq; q-; print(Sq в поле t); q-; LPB Вывод на принтер литеры, код [66] LPB [] которой содержится в младшем байте вершины: print(<литера Sq(7:0)>); q-; LPSP Перевести печатающую головку LPSP на одну позицию вправо (пробел) LPCR Печатать с начала новой строки LPCR LPFF Печатать с начала очередной LPFF страницы [n] LPT Печатать с позиции n текущей [30] LPT строки [a,n] LPS Вывод на принтер n байтов из [760,96] LPS [] главной памяти, начиная с адреса a Команды манипулирования буфером редактора KE Очистить буфер редактора текста KE IE <имя> Дополнить содержимое буфера IE TEST.DSP редактора копией файла <имя> FE <имя> Очистить буфер, ввести в буфер FE NEW текст из файла <имя>, войти в режим редактирования. KE IE <имя> E OE <имя> Скопировать содержимое буфера OE TEST1 редактора в файл <имя>. O Скопировать содержимое буфера O редактора в текущий (введенный процедурами IE/FE) файл NE Вывести на терминал имя NE текущего файла редактора [TEST.DSP] PF Выдать копию содержимого PF буфера на вход ДССП-процессора LPE Выдать копию содержимого LPE буфера на принтер FR Выдать на терминал количество FR байтов свободной памяти в буфере [ 1385] E Войти в режим редактирования E Работа в режиме редактирования При входе в режим редактирования выдается признак конца текста - треугольник. При движении курсора вниз печатается 1-ая страница текста, а при движении курсора вверх - последние строки текста. Таким образом можно просматривать и редактировать текст как с начала, так и с конца. Ctrl+E / ESC выход из режима редактирования | <- -> сдвинуть курсор в соответствующем направлении | F6 вставить новую строку перед текущей CTRL F6 удалить текущую строку CTRL <пробел> вставить пробел в текущей позиции DEL удалить символ в текущей позиции ENTER переход на первую позицию следующей строки; при отсутствии следующей строки в тексте образуется новая ТAB перемещение курсора на позицию, кратную 8 END движение на конец строки HOME движение на начало строки CTRL J разделение строки по текущей позиции CTRL A присоединение следующей строки к текущей позиции PgDn выдать следующий экран текста PgUp выдать предыдущий экран текста удалить часть строки, начиная с текущей позиции F9 отметить маркером текущую строку для последующего перемещения, копирования или удаления. можно отметить не более 2 строк CTRL F9 удалить маркеры CTRL C копировать участок, отмеченный маркерами, перед текущей строкой CTRL G переставить отмеченный маркерами участок перед текущей строкой CTRL D удалить отмеченный маркерами текст СTRL F5 задать образец для контекстного поиска (конец задания - 'ENTER') F5 продолжить поиск CTRL F4 начать или закончить определение макроса F4 выполнить макрос Ins переключить режим вставки/замены Команды проверки и отладки программ \L <имя> Рекомпилировать и выдать на \L SP экран тело процедуры <имя>; [: SP 32 TOB ;] [i] \P <имя> Установить точку останова [1] \P SP [] перед i-м словом в теле [32] процедуры <имя>. Это слово выдается на экран: i:=Sq; q-; \+ Перенести точку останова на \ одно слово вперед и выдать на [TOB] экран слово, перед которым установлена точка. \ Перенести точку останова на \ одно слово вперед, выдать на [TOB] экран слово, перед которым установлена точка, и выполнить слово, перед которым она находилась; \\ Перенести точку останова на \\ два слова вперед, выдать на [;] экран слово, перед которым установлена точка, и выполнить участок, через который она перенесена; \\\ То же, что и \\, но перенос \\\ на три слова; [n] \T То же, что и \\\, но перенос [5] \T [] на n слов вперед (n>0): n:=Sq; q-; [n] \M Установить кратность точки [5] \M [] останова; \SE <имя> Назначить процедуру <имя> в \SE .. качестве дополнительных дей- ствий при останове; \C Отменить точку останова; [] \C [] \G Продолжить выполнение [] \G [] программы, остановившейся в точке останова или на неопределенном слове;