Подпрограммы сохранения регистров предназначены для использовании в своих подпрограммах когда нужно сохранить регистры на время их выполнения и восстановить при возврате.
Данные подпрограммы вызываются в начале своей подпрограммы и сохраняют определенные регистры (см выше). Содержимое регистров сохраняется таким же как до сохранения. При возврате из подпрограммы регистры восстанавливается. Бит C не изменяется при восстановлении.Код:CALL $SAVAL ;СОХРАНЯЕТ ВСЕ РЕГИСТРЫ JSR R5,$SAVRG ;СОХРАНЯЕТ РЕГИСТРЫ 3-5 JSR R2,$SAVVR ;СОХРАНЯЕТ РЕГИСТРЫ 0-2 JSR R5,.SAVR1 ;СОХРАНЯЕТ РЕГИСТРЫ 1-5
Подпрограммы арифметики выполняют операции умножения и деления без использования команд EIS.
Подпрограммы преобразования данных позволяют конвертировать данные в текстовый формат и обратно.Код:;БЕЗЗНАКОВОЕ УМНОЖЕНИЕ ОДИНАРНОЙ ТОЧНОЧТИ ; ;ВХОД: ВЫХОД: ;R0 - МНОЖИТЕЛЬ R0 - ПРОИЗВЕДЕНИЕ (СТАРШАЯ ЧАСТЬ) ;R1 - МНОЖИМОЕ R1 - ПРОИЗВЕДЕНИЕ (МЛАДШАЯ ЧАСТЬ) ; CALL $MUL ;БЕЗЗНАКОВОЕ ДЕЛЕНИЕ ОДИНАРНОЙ ТОЧНОЧТИ ; ;ВХОД: ВЫХОД: ;R0 - ДЕЛИМОЕ R0 - ЧАСТНОЕ ;R1 - ДЕЛИТЕЛЬ R1 - ОСТАТОК ; CALL $DIV ;УМНОЖЕНИЕ ДВОЙНОЙ ТОЧНОСТИ ; ;ВХОД: ВЫХОД: ;R0 - МНОЖИТЕЛЬ R0 - ПРОИЗВЕДЕНИЕ (СТАРШАЯ ЧАСТЬ) ;R2 - МНОЖИМОЕ (СТАРШАЯ ЧАСТЬ) R1 - ПРОИЗВЕДЕНИЕ (МЛАДШАЯ ЧАСТЬ) ;R3 - МНОЖИМОЕ (МЛАДШАЯ ЧАСТЬ) ; CALL $DMUL ;ДЕЛЕНИЕ ДВОЙНОЙ ТОЧНОСТИ ; ;ВХОД: ВЫХОД: ;R0 - ДЕЛИТЕЛЬ (БЕЗ ЗНАКА) R0 - ОСТАТОК ;R1 - ДЕЛИМОЕ (СТАРШАЯ ЧАСТЬ) R1 - ЧАСТНОЕ (СТАРШАЯ ЧАСТЬ) ;R3 - ДЕЛИМОЕ (МЛАДШАЯ ЧАСТЬ) R2 - ЧАСТНОЕ (МЛАДШАЯ ЧАСТЬ) ; CALL $DDIV
Подпрограммы $TIM, $EDMSG, $DAT, $DAT4 и $DATS работают с временем в формате, возвращаемом RSXной директивой GTIM$. Формат описан выше. Для упрощения была добавлена подпрограмма $GTTIM которая на входе получает адрес 8-словного буфера в R1 и заполняет его датой и временем в формате GTIM$.Код:;ASCII -> ЧИСЛО ДВОЙНОЙ ТОЧНОСТИ ;ДЕСЯТИЧНОЕ (.DD2CT) ИЛИ ВОСЬМЕРИЧНОЕ (.OD2CT) СО ЗНАКОМ. ; ;ВХОД: ВЫХОД: ;R3 - АДРЕС ДВУХСЛОВНОГО БУФЕРА CC/CS - УСПЕХ/ОШИБКА ;R4 - КОЛИЧЕСТВО СИМВОЛОВ В СТРОКЕ ;R5 - АДРЕС ИСХОДНОЙ СТРОКИ ; CALL .DD2CT CALL .OD2CT ;ASCII -> ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ ;ДЕСЯТИЧНОЕ ($CDTB) ИЛИ ВОСЬМЕРИЧНОЕ ($COTB). ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС СТРОКИ R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ; R1 - ЧИСЛО ; R2 - СИМВОЛ НА КОТОРОМ ПРЕОБРАЗОВАНИЕ ; ОСТАНОВИЛОСЬ ; CALL $CDTB CALL $COTB ;ASCII -> RADIX-50 ;1-3 СИМВОЛА БЕЗ ПРОБЕЛОВ ($CAT5) ИЛИ С ПРОБЕЛАМИ ($CAT5B). ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС СТРОКИ R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ R1 - ЗНАЧЕНИЕ ; 0 - ТОЧКА = КОНЕЦ R2 - СИМВОЛ НА КОТОРОМ ПРЕОБРАЗОВАНИЕ ; 1 - ТОЧКА = СИМВОЛ ОСТАНОВИЛОСЬ ; CC/CS - УСПЕХ/ОШИБКА ; CALL $CAT5 CALL $CAT5B ;ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ -> ASCII ;ДЕСЯТИЧНОЕ ОТ 0 ДО 99 ($CBDAT), ДЕСЯТИЧНОЕ ОТ 0 ДО 9999 ($CBDT4), ;ДЕСЯТИЧНОЕ ($CBDMG), ДЕСЯТИЧНОЕ СО ЗНАКОМ ($CBDSG), ВОСЬМЕРИЧНОЕ ($CBOMG), ;ВОСЬМЕРИЧНОЕ СО ЗНАКОМ ($CBOSG), ВОСЬМЕРИЧНОЕ ОДНОБАЙТОВОЕ ($CBTMG) ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС БУФЕРА R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - ЧИСЛО ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ ; 0 - ПОДАВЛЯТЬ НАЧАЛЬНЫЕ НУЛИ ; НЕ 0 - НЕ ПОДАВЛЯТЬ ; CALL $CBDAT CALL $CBDT4 ;XX ЕСЛИ R1 < 1900, XXXX ЕСЛИ R1 >= 1900 CALL $CBDMG CALL $CBDSG CALL $CBOMG CALL $CBOSG CALL $CBTMG ;ЧИСЛО ДВОЙНОЙ ТОЧНОСТИ -> ASCII ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС БУФЕРА R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - АДРЕС ДВУСЛОВНОГО ЧИСЛА ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ ; 0 - ПОДАВЛЯТЬ НАЧАЛЬНЫЕ НУЛИ ; НЕ 0 - НЕ ПОДАВЛЯТЬ ; CALL $CDDMG ;ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ -> ASCII ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС БУФЕРА R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - ЧИСЛО ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ ; БИТЫ 0-7 - ОСНОВАНИЕ (2-10) ; БИТ 8 - ЧИСЛО СО ЗНАКОМ ; БИТ 9 - НЕ ПОДАВЛЯТЬ НУЛИ ; БИТ 10 - ШИРИНА ПОЛЯ (1-31) ; CALL $CBTA ;ASCII НИЖНИЙ РЕГИСТР -> ВЕРХНИЙ РЕГИСТР ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС ИСХОДНОЙ СТРОКИ R0, R1 - НЕ МЕНЯЮТСЯ ;R1 - АДРЕС БУФЕРА R2 - 0 ;R2 - КОЛИЧЕСТВО СИМВОЛОВ ; CALL $CVTUC ;ДАТА -> ASCII ;DD-MMM-YY ($DAT), DD-MMM-YYYY ($DAT4, $DATS) ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС БУФЕРА R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - АДРЕС ТРЕХСЛОВНОГО МАССИВА ; +00 - ГОД-1900 ; +02 - МЕСЯЦ ; +04 - ДЕНЬ ; CALL $DAT CALL $DAT4 CALL $DATS ;ВРЕМЯ -> ASCII ; ;ВХОД: ВЫХОД: ;R0 - АДРЕС БУФЕРА R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - АДРЕС ПЯТИСЛОВНОГО МАССИВА ; +00 - ЧАСЫ ; +02 - МИНУТЫ ; +04 - СЕКУНДЫ ; +06 - ТИКИ ; +10 - ТИКОВ В СЕКУНДУ ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ ; 1 - HH ; 2 - HH:MM ; 3 - HH:MM:SS ; 4 - HH:MM:SS.S ; CALL $TIM
Подпрограмма форматирования данных $EDMSG упрощает подготовку данных для вывода на экран, принтер или в файл.
Форматная строка состоит из текста и директив форматирования и завершается нулевым байтом. Формат директив: "%nX" где n - количество использования директивы, X - символ директивы. Вместо n можно использовать символ "V" - в этом случае количество берется из очередного слова блока аргументов. Если в директиве указано количество использования, результаты разделяются знаками табуляции (кроме директив %A, %E для которых количество используется как длина строки).Код:;ФОРМАТИРОВАННЫЙ ВЫВОД ; ;ВХОД: ;R0 - АДРЕС БУФЕРА R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА ;R1 - АДРЕС ФОРМАТНОЙ СТРОКИ ;R2 - АДРЕС БЛОКА АРГУМЕНТОВ ; CALL $EDMSG
Блок аргументов представляет собой последовательные слова, содержащие аргументы для директив. Не все директивы требуют аргументов.
Директивы работы со строками:
Директивы работы с числами:Код:Директива Аргумент Вывод -------------------------------------------------------------------------------- %A,%nA,$VA адрес символа/строки символ/строка (n - количество %E,%nE,%VE адрес символа/строки аналогично %A, непечатные символы заменяются на пробелы %I адрес ASCIZ строки вставка в форматную строку
Другие форматы:Код:Директива Аргумент Вывод ----------------------------------------------------------------------------------- %D,%nD,%VD слово десятичное слово со знаком, без заполнения нулями %M,%nM,%VM слово десятичное слово без знака, без заполнения нулями %U,%nU,%VU слово десятичное слово без знака, с заполнением нулями %B,%nB,%VB адрес байта восьмеричный байт без знака, с заполнением нулями %O,%nO,%VO слово восьмеричное слово со знаком, без заполнения нулями %P,%nP,%VP слово восьмеричное слово без знака, с заполнением нулями %T,%nT,%VT адрес двух слов десятичное число двойной точности без знака, без заполнения нулями
Управление:Код:Директива Аргумент Вывод ----------------------------------------------------------------------------------- %R,%nR,%VR слово в RADIX-50 ASCII строка %X,%nX,%VX 5-словный блок имени ASCII строка, пробелы удаляются файла %Y адрес трех слов вывод даты с использованием $DATS %1Z адрес 5 слов вывод времени с использованием $TIM, HH %2Z HH:MM %3Z HH:MM:SS %4Z HH:MM:SS.S
Код:Директива Аргумент Вывод ------------------------------------------------------------------------------------ %F,%nF,%VF <FF> %N,%nN,%VN <CR><LF> %S,%nS,%VS пробел %n< n пробелов, указатель на буфер не сдвигается %n> дополняет пробелами до n еслин нужно, значение n должно совпадать с ранее заданным в директиве %n<




Ответить с цитированием