БАЗОВЫЙ НАБОР КОМАНД ДССП
~~~~~~~~~~~~~~~~~~~~~~~~~
Обозначения:
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]
TRAP <имя> <проце- Объявить командное прерывание TRAP OV REACT
дура реагирования> <имя>, сопоставив ему процеду- TRAP SE ."Стек пуст"
ру конечного реагирования
ON <имя> <проце- Подменить реагирование, уста- ON OV ."OVERFLOW"
дура реагирования> новленное для прерывания <имя>
EON <имя> <проце- Подменить реагирование, уста- EON OV NOP
дура реагирования> новленное для командного пре-
рывания <имя>, реагированием
с предварительным выходом из
тела процедуры, содержащей EON
Команды выполнения процедур по условию и в циклах
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):=<код литеры>;
<TRB "Откат" для операции TRB, [] TRB [95]
т.е. выполнение <TRB перед <TRB TRB [95,95]
TRB приведет к повторному
вводу последнего введенного
байта без нового нажатия
клавиши;
TON Вывод на экран терминала [245,6] TON []
числа из подвершины стека [ 245]
в поле, длину которого
указывает вершина:
t:=Sq; q-;
displ(Sq в поле t); q-;
TOB Вывод на экран терминала [65] TOB []
литеры, код которой содер- #B [66] TOB []
жится в младшем байте вершины;
displ(<литера 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
Команды управления файлами и работы с диском
Процедуры для работы с директориями
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 []
программы, остановившейся
в точке останова или на
неопределенном слове;