Значит, динамически загруженные с завершением программы выгружаются
Вид для печати
Так и должно быть. С помощью .FETCH драйвер подгружается для программы, а не насовсем.
Если хочется из программы подгрузить драйвер нужно использовать другой вариант: с помощью .DSTAT проверить загружен ли он, если нет - сделать выход с выполнением командами LOAD CL и RUN имяпрограммы (пример выходя с командой есть в описании макробиблиотеки).
- - - Добавлено - - -
Начальный верхний адрес - это содержимое @#50 плюс 2.
После вызова .FETCH, новый адрес вернется в R0
- - - Добавлено - - -
У меня тоже некоторые проги так делают.
В последних прогах где-то перешел на родной $INIDM от DEC :)
https://pic.maxiol.com/images/155920...0075909177.png
красота, да будут часики на экране ! @form про команду на выходе - я понял, мне наверное и то и то нужно
- - - Добавлено - - -
@form > Начальный верхний адрес - это содержимое @#50 плюс 2.
После вызова .FETCH, новый адрес вернется в R0
Правильно или не очень )))
- такой вариант часы запускает.
Код:
START: MOV @#50,R0
SUB #2,@#R0
.FETCH @#R0,#NLNAME ;Load NL handler
BCS FERR ;Not available
; Use handler
поправил в такой вид, часики подгружает и на выходе выгружает,Код:.TITLE RELEAS
.MCALL .FETCH,.RELEAS,.EXIT,.PRINT
START: MOV @#50,R1
ADD #2, R1
.FETCH R1,#NLNAME ;Load NL handler
BCS FERR ;Not available
; Use handler
; .RELEAS #NLNAME ;Mark NL no longer in memory
.PRINT #OK ;NL not available
BR .
FERR: .PRINT #NONL ;NL not available
.EXIT
NLNAME: .RAD50 /CL / ;Name for NL handler
NONL: .ASCIZ /?RELEAS-F-NL handler not available/
OK: .ASCIZ /?RELEAS-I-Ok!/
.EVEN
HSPACE: ;Beginning of handler area
.END START
получается .RELEAS можно не использовать? я его закомментил как видно.
Годится. Вместо ADD #2,R1 здесь можно использовать TST (R1)+ - это на слово короче.
Он нужен только если тебе в рамках работы программы потребовалось освободить память от ранее .FETCHнутого драйвера. Специально вызывать его перед выходом не надо - он неявно сам выполнится когда потребуется.
Да! Я это и хотел попросить разжевать для меня. Я очень туг в плане этой регистровой математики, иначе быть мне системщиком однозначно. По синтаксису я понимаю эту строку так, сравниваем с нулём содержимое R1? Но что в
данном случае означают скобки с плюсом и как сравнение с нулём может заменить операцию сложения (типа сдвиг, смещение). ??? может немного сумбурно, но я же хотел чётко понимать процедуру, а не тупо шпаргалить. вот прибавить двойку мне более понято, ещё вопрос третий вариант два INC подряд будет тем же самом в плане результата, ведь можно
тогда написать свой макрос где тупо задать количество операций INC или DEC?
- - - Добавлено - - -
ура! я сдал Олегу контрольную ))) Спасибо за шпору Хунта!
Просто проверяем значение ячейки памяти, адрес которой хранится в регистре (как итог - знаем равно нулю/меньше нуля или наоборот). В данном случае для нас результат проверки неинтересен, для нас важно, что такой адрес существует в принципе (иначе такая команда не годилась бы).
Это значит что после обращения, значение регистра увеличится на 2 (или на 1 если обращение байтовое [исключение - регистры 6 (SP) и 7 (PC) - они всегда на 2 изменяются]).
Это не имеет смысла поскольку уже два вызова INC/DEC - это два слова (для регистра), а дальше - больше. Тут как раз ADD будет лучше.