На счет программирования на асме под MACRO11.
Есть ли в нем обозначение для представления шестнадцатиричных чисел? Для восмиричных нашел ^O перед числом, а для шестнадцатиричных не нашел. Radix не предлагать.
На счет программирования на асме под MACRO11.
Есть ли в нем обозначение для представления шестнадцатиричных чисел? Для восмиричных нашел ^O перед числом, а для шестнадцатиричных не нашел. Radix не предлагать.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Можно использовать подпрограммы/функции на ассемблере. Принцип такой: создается файл .MAC с нужными подпрограммами, имя подпрограммы совпадает с меткой ассемблера (должна быть объявлена глобальной). На входе R5 указывает на вектор в котором первое слово - количество переданных аргументов, а следующие слова - адреса передаваемых параметров или -1 (177777 восьм.) если параметр пропущен. Если это функция, возвращать параметры можно через R0 (R0:R1 для двухсловных значений). Все регистры можно менять. Дополнительно остановлюсь на том, что в фортране параметры подпрограмм всегда передаются ссылкой в отличие от C или паскаля, если делается скажем CALL XXX(1), а внутри подпрограммы SUBROUTINE XXX(I) делается присвоение вида I = 3, то при следующем попадании на этот же вызов, в качестве аргумента будет передано 3.
Пример:
Фортран:
Ассемблер:Код:J = IFUFL(1, 2, , 'TEXT', , I)
Живой пример:Код:IFUFL:: ; ; В ЭТОМ МЕСТЕ: ; (R5) - 6 (ЧИСЛО АРГУМЕНТОВ) ; 2(R5) - ССЫЛКА НА АРГУМЕНТ "1" ; 4(R5) - ССЫЛКА НА АРГУМЕНТ "2" ; 6(R5) - -1 (АРГУМЕНТ ПРОПУЩЕН) ; 10(R5) - ССЫЛКА НА ASCIZ СТРОКУ 'TEXT' ; 12(R5) - -1 (АРГУМЕНТ ПРОПУЩЕН) ; 14(R5) - ССЫЛКА НА АРГУМЕНТ "I" ; ... MOV #123456,R0 ;ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ RETURN ;ВОЗВРАТ ПО RTS PC
Код:PROGRAM TEST CALL TXT('LALALA','XAXAXA',,'BUBUBU') CALL EXIT END .TITLE TXT -- ПЕЧАТЬ ТЕКСТОВЫХ СТРОК .MCALL .PRINT TXT:: MOV (R5)+,R1 ;ЧИСЛО АРГУМЕНТОВ BEQ 30$ ;EQ - НЕТ АРГУМЕНТОВ 10$: MOV (R5)+,R0 ;АДРЕС ОЧЕРЕДНОГО АРГУМЕНТА CMP #-1,R0 ;ЕСЛИ -1 - АРГУМЕНТ ПРОПУЩЕН BEQ 20$ ;...ПРОПУСКАЕМ .PRINT ;ПЕЧАТАЕМ СТРОКУ 20$: SOB R1,10$ ;ЦИКЛИМСЯ ПОКА ЕСТЬ АРГУМЕНТЫ 30$: RETURN ;ВОЗВРАЩАЕМ УПРАВЛЕНИЕ .END .SET FOR F77 .FORT F .MAC A .LIN F,A,SY:FORLIB/LIB .RUN F LALALA XAXAXA BUBUBU .
Последний раз редактировалось form; 21.04.2011 в 10:06. Причина: приведение буковок в согласие с классикой...
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Еще пример - использование прерываний в фортрановской программе.
Коментарии в ассемблерном коде.
В данном примере прога тупо крутится в цикле, печатая всякую фигню, при нажатии CTRL/C выходит.
Последний раз редактировалось form; 07.06.2014 в 18:34.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
^X
---------- Post added at 11:36 ---------- Previous post was at 11:07 ----------
Фортран только транслятор (или компилятор - в данном случае это одно и то же). Бейсики есть и трансляторы (для RT-11 не видел) и интерпретаторы.
Процедура работы с фортрановской программой от исходника до готовой програмы такая (на примере того же RT-11): компиляция (команда FORTRAN), сборка (команда LINK). К примеру:
Здесь мы при сборке указываем библиотеку фортрановских подпрограмм.Код:.FORT FORPRG !КОМПИЛЯЦИЯ ПРОГРАММЫ .LIN FORPRG/LINK:SY:FORLIB !СБОРКА ПРОГРАММЫ .!ИЛИ ОДНОЙ КОМАНДОЙ: .EXE FORPRG/LINK:SY:FORLIB !КОМПИЛЯЦИЯ, СБОРКА, ЗАПУСК .EXE FORPRG/NORU.... !АНАЛОГИЧНО НО БЕЗ ЗАПУСКА
Библиотека обычно называется FORLIB, но для F77 может называться F77OTS (обычно используется если в системе одновмеренно есть и F77 и FIV).
В RT-11 версий 5.6 и 5.7 компилятор фортрана для команды FORTRAN выбирается командой SET FORTRA F77 или SET FORTRA FORTRA.
Сложного в фортране действительно ничего нет, но надо помнить о некоторых особенностях языка (некоторые из них описаны в прошлых письмах). Типичные ошибки тех, кто привык к C или паскалю:
CALL SUBR(1) - Многие думают, что это вызов подпрограммы SUBR с аргументом 1. Для фортрана это верно только если подпрограмма SUBR не меняет переменную, используемую для передачи параметра. Если меняет - изменение будет действовать при следующем вызове из этого же места.
2. FORMAT('TEXT') - данный формат не напечатает строчку "TEXT" - первый символ в строке используется для форматирования, к примеру:
0 или пробел - печать с новой строки
1 - печать с новой страницы (на терминале отрабатывает 8 переносов строки, на принтере пробрасывает бумагу до следующей страницы)
+ - печать с той же строки на которой стоим
Также для программирования на фортране полнзно изучить описание подпрограмм системной библиотеки - там много нужного. В том числе есть подпрограммы для работы с памятью (насчет портов, на PDP-11 такого понятия отдельно нету).
Документация на английском:
RT-11 V5.6: System Subroutine Library Manual
RT-11 V5.6: System Macro Library Manual
RT-11 V5.6: System Internals Manual
PDP-11 MACRO-11 Language Reference Manual (MACRO-11 Version 5)
PDP-11 FORTRAN IV Language Reference Manual (FORTRAN IV Version 2.6)
PDP-11 FORTRAN 77 Language Reference Manual (FORTRAN 77 Version 5.0)
на русском:
РАФОС-ПЛЮС: Системные таблицы и библиотеки. Руководство программиста.
ФОДОС-2: Программирование периферийных устройств.
ФОДОС-2: Ассемблер. Руководство программиста.
ФОДОС-2: Системная макробиблиотека. Руководство программиста.
ФОДОС-2:Монитор системы. Руководство программиста.
---------- Post added at 11:47 ---------- Previous post was at 11:42 ----------
Бр-р-р! Тяжко в форуме редактировать написанное - еле управился
Последний раз редактировалось form; 21.04.2011 в 10:20.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Есть книжка на тему:
http://www.kodges.ru/97371-oshibki-l...-fortrane.html
После прочтения открываются БЕЗДНЫ ЗНАНИЯ. Начинаешь понимать, насколько глубокий и мощный язык Фортран. Но в книжке больше ориентация на ЕС-овский фортран, DEC-овская реализация может отличаться.
hobot (08.04.2021)
Да, отличная книжка.
Я изучал по какой-то старой толстой книге и когда пришел на DEC, оказалось, что там все также, причем в книге упоминались даже TYPE/PRINT/PUNCH
Вот GNU F77 как-то посмотрел - там ни тебе с аргументами разобраться ни фортрановский (!) format character не поддерживается
Про TYPE/PRINT/PUNCH говорить даже не стану - и так ясно
Хорошо хоть WRITE(*) работает
--
GOD is REAL, unless declared INTEGER (правило фортрана)
---------- Post added at 15:08 ---------- Previous post was at 14:37 ----------
И раз пошла такая пьянка - пример для современного gcc на обычных i386 машинах
Как можно догадаться, программа напечатаетКод:#include <stdio.h> int main(void) { char c = 128; if (c != 128) printf("Shit happens!\n"); return (0); }
"Shit happens!"
Последний раз редактировалось form; 21.04.2011 в 11:41.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
По какому принципу происходит прерывание программы по Ctrl-C?
Есть ли возможность при этом выполнить какую-то собственную процедурку, допустим, восстановление векторов прерываний или еще что-то, а уже потом выйти?
И еще, в MACRO-11 очень короткая длина меток, всего 6 символов. Есть ли возможность ее увеличить?
Там же все описано в коментариях.
Из фортрана делается
EXTERNAL SUB
CALL ATTACH(SUB)
...
SUBROUTINE SUB(KEY)
...
END
когда нажимается клавиша, вызывается SUB
и получает параметром код нажатой клавиши
Это собственно просто пример который показывает как передать адрес подпрограммы для последующего использования в ассемблер.
В этом примере подпрограмма просто проверяет код клавиши и если CTRL/C устанавливает переменную которую проверяет основная программа, но в принципе можно было бы прямо из нее вызывать CALL DETACH и CALL EXIT.
Увеличить больше 6 нельзя. Равно как и в фортране имена переменных/подпрограмм/общих блоков итд сделать больше 6 символов.
То есть написать можно и больше 6, но при обработке будут использоваться только 6 из них.
Причем символы годятся не всякие...
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)