Ок, посмотрю, но когда получится - наверняка не скажу. Точнее так - в выходные - да, а вот до выходных получится или нет..
Вид для печати
Ок, посмотрю, но когда получится - наверняка не скажу. Точнее так - в выходные - да, а вот до выходных получится или нет..
В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.
- - - Добавлено - - -
Если вы про DECUS C, то он с FPP работает в режиме двойной точности, в библиотеке она устанавливается командой SETD (170011). При работе с переменными одинарной точности происходит загрузка и сохранение регистров с преобразованием точности. В качестве примера небольшая программка и полученный результат на ассемблере:
Код:float a1,a2,a3;
double b1,b2,b3;
int main()
{
a1=1; a2=2; a3=a1/a2;
b1=1; b2=2; b3=b1/b2;
}
Код:.comm _a1,4
.comm _a2,4
.comm _a3,4
.comm _b1,10
.comm _b2,10
.comm _b3,10
.globl _main
.text
_main:
~~main:
jsr r5,csv~
movf $40200,r0
movfo r0,_a1
movf $40400,r0
movfo r0,_a2
movof _a1,r0
movof _a2,r1
divf r1,r0
movfo r0,_a3
movf $40200,r0
movf r0,_b1
movf $40400,r0
movf r0,_b2
movf _b1,r0
divf _b2,r0
movf r0,_b3
jmp cret~
.globl fpin~~
.globl fppr~~
.globl fpem~~
Уже разобрался (ранее ориентировался только на код, генерируемый компилятором). Вывод, сделанный ранее про PDP-11 C V1.2-006 был неверен, идет работа с double:
#include <stdio.h>
#define N 20
int main()
{
int i;
static double o1, o2, v1, v2, v3, v4;
for(i=0; i<N; i++)
{
o1=i+1; o2=o1; v1=o1+o2; v2=o1-o2;
v3=o1*o2; v4=o1/o2;
}
}
.TITLE TOP8NP
.IDENT /V1.0 /
.PSECT $CODEI,RO,I,LCL,REL,CON
$CODEI:
.PSECT $READW,RW,D,GBL,REL,CON,SAV
$READW:
.BLKB 8. ; o1
.BLKB 8. ; o2
.BLKB 8. ; v1
.BLKB 8. ; v2
.BLKB 8. ; v3
.BLKB 8. ; v4
.GLOBL C$SVFR,C$MAI
.PSECT $CODEI
MAIN:: ; main
CALL C$SVFR ; 227
CLR R4 ; 232 i
BR 2$
1$: MOV R4,R5 ; 234 i,
INC R5
SETD
SETI
LDCIF R5,F3
STF F3,$READW+0 ; ,o1
LDF $READW+0,F3 ; o1,
STF F3,$READW+8. ; ,o2
LDF $READW+0,F3 ; o1,
ADDF $READW+8.,F3 ; o2,
STF F3,$READW+16. ; ,v1
LDF $READW+0,F3 ; o1,
SUBF $READW+8.,F3 ; o2,
STF F3,$READW+24. ; ,v2
LDF $READW+0,F3 ; 235 o1,
MULF $READW+8.,F3 ; o2,
STF F3,$READW+32. ; ,v3
LDF $READW+0,F3 ; o1,
DIVF $READW+8.,F3 ; o2,
STF F3,$READW+40. ; ,v4
INC R4 ; 232 i
2$: CMP R4,#20. ; i,
BLT 1$
RETURN
.END
- - - Добавлено - - -
Эта програмка на PDP-11 C выглядит нагляднее:
.PSECT $CODEI,RO,I,LCL,REL,CON
$CODEI:
.PSECT $READW,RW,D,GBL,REL,CON,SAV
$READW:
A1:: .BLKB 4 ; a1
A2:: .BLKB 4 ; a2
A3:: .BLKB 4 ; a3
B1:: .BLKB 8. ; b1
B2:: .BLKB 8. ; b2
B3:: .BLKB 8. ; b3
.GLOBL C$SVFP,C$MAI
.PSECT $CONST,RO,D,LCL,REL,CON
$CONST:
.FLT4 2.
.FLT4 1.
.FLT2 2.
.FLT2 1.
.PSECT $CODEI
MAIN:: ; main
CALL C$SVFP ; 228
SETF ; 230
LDF $CONST+20.,F3
STF F3,A1 ; ,a1
LDF $CONST+16.,F3
STF F3,A2 ; ,a2
LDF A1,F3 ; a1,
DIVF A2,F3 ; a2,
STF F3,A3 ; ,a3
SETD ; 231
LDF $CONST+8.,F3
STF F3,B1 ; ,b1
LDF $CONST+0,F3
STF F3,B2 ; ,b2
LDF B1,F3 ; b1,
DIVF B2,F3 ; b2,
STF F3,B3 ; ,b3
RETURN
.END
Читал, сейчас вспомнил, но так как судьба меня не сводила с FPU :(
Из лайфхаков, под XM можно собирать компилятор с ключами /V вместо /O при генерации. Процесс компиляции сильно ускоряется, так как компилятор грузится в память и от туда работает...
Плюс VBGEXE, тоже способ ускорения ... :)
Можно в XM держать постоянно в памяти редактор, компилятор и линкер :)
VBGEXE вполне запускается и как системное задание тоже...
Насчёт работы без FPU F77, у меня работал на 1801ВМ3, но нужно ключ соответствующий и не обращаться к плавающий арифметике... Целые считаются через EIS.
И прочитал года 4 назад, что есть специальная библиотека для работы F77 на процессорах без FPU.
Ну плюс существует драйвер - эмулятор FPU
Насчёт RT не скажу, но в варианте исполняющей библиотеки под RSX нужно было слегка модуль инициализации хакнуть - оно чего-то там делало, детали с ходу не вспомню, надо свои файлы с ДВК глянуть.
И именно для комплятора под RSX такого ключа не помню.
Гляну сво файлы (постараюсь сегодня), когда и если найду - отпишусь. Скорее всего это будет с одновременной проверкой на PDP-11/23+
С FPU напрямую тоже дела не имел, решил попробовать:
.TITLE FDIV
.IDENT /X1.0/
.MCALL .EXIT
.PSECT $CODE1
; JSR PC,OTI$
; MOV #-73200,-(SP)
; MOV #23051,R4
; JSR R4,@$NAM$
; MOV #-5,$SEQC
START: MOV #1,R2
SETD
SETI
L$GANC:
; MOV #-6,$SEQC
LDCIF R2,%1
LDF %1,%0
DIVF %1,%0
STF %0,V
INC R2
CMP R2,#24
BLE L$GANC
MOV R2,I
; CLR -(SP)
; JSR PC,STOP$
.EXIT
;
V: .BLKB 8.
I: .BLKB 2
;
.END START
В итогк получил: ?MON-F-FPU trap 001014
- - - Добавлено - - -
Как получить доступ к регистрам FPU?
%0-%3, в некоторых командах %4 и %5
Ну или стандартное R0-R5
Основной нюанс - какой регистр - CPU или FPP - определяется командной, скажем, если это LDF/LDD, то источник - процессор, а приёмник - FPP.
Доп нюанс. В некоторых командах, когда в качетстве источника/приёмника указан регистр - то это будет не регистр процессора, а FPP.
Проверил с % и без -- работает в обоих случаях (очевидно ранее где-то была ошибка)
Примеры:
172367 000172 ADDF V1,3
172567 000112 LDF V2,1
172467 000054 LDF V2,0
172367 000172 ADDF V1,%3
172567 000112 LDF V2,%1
172467 000054 LDF V2,%0
Результат работы:
.RUN FTEST
Enter first value (int dec): 3
Enter second value (int dec): 15
ADD result=00018.
SUB result=00012.
MUL result=00045.
DIV result=00005.
- - - Добавлено - - -
Прога:
.TITLE FDIV
.IDENT /X1.0/
.MCALL .EXIT, .DEBUG, .DPRINT, .PRINT
.ENABL LSB
.DEBUG SWITCH=ON,VALUE=YES
.PSECT $CODE1
START: CLR R1
1$: .PRINT PRTMSG(R1)
CALL INDEC
BCC 2$
.EXIT
2$: MOV R0, INVAL(R1)
TST (R1)+
CMP R1, #4
BNE 1$
;
CLR R0
;
SETD
SETI
L$GANC:
LDCIF INVAL,%3
STF %3,V1
LDCIF INVAL+2,%3
STF %3,V2
ADDF V1,%3
STCFI %3,IRES
.DPRINT ^"ADD result=",IRES,DEC
;
LDF V2,%2
SUBF V1,%2
STCFI %2,IRES
.DPRINT ^"SUB result=",IRES,DEC
;
LDF V2,%1
MULF V1,%1
STCFI %1,IRES
.DPRINT ^"MUL result=",IRES,DEC
;
LDF V2,%0
DIVF V1,%0
STCFI %0,IRES
.DPRINT ^"DIV result=",IRES,DEC
.EXIT
;
V: .BLKB 8.
V1: .BLKB 8.
V2: .BLKB 8.
INVAL: .BLKW 2
IRES: .BLKW 1
;
PRTMSG: .WORD EFVMSG
.WORD ESVMSG
EFVMSG: .ASCII /Enter first value (int dec): /<200>
ESVMSG: .ASCII /Enter second value (int dec): /<200>
.EVEN
.END START
- - - Добавлено - - -
Нужно поменять - не порядок...
% - вроде как в старых ассемблерах регистры обозначались, потом заменили на R
% - остался для совместимости.
Что касается FPP(раньше писал FPU), то насколько я помню из когда-то прочитанного, то есть два способа работы c FPP
Правда там не указывалась конкретная модель, писалось просто PDP-11 :(
Первый непосредственно с регистрами. Второй - как со стеком.
Самое интересно, то FPU от Интела 8087 и прочие очень похожи на FPU DEC по программированию.
Интересно, на сколько коды команд совпадают ? ;)
Единственно Интел накрутил разрядность до 80 разрядов, чтобы точность поднять.
Я полагаю, что это связано со стандартами IEEE 754 на работу с числами с плавающей запятой, а стандарт писался с большой оглядкой на изделия DEC...
Правда потом были изменения в IEEE, но там в основном изменения поведения процессора в крайних случаях.
Так же как стандарт дисплея ANSI ну прямо очень похож на VT100 да практически калька с VT340
По поводу основных команд FPP DEC, когда одной команды не хватает...
А вот когда более десятка - возникает желание разобраться...
Да и на одной команде можно пролететь как фанера над Парижем...
Нашёл пример кода аж с 1973 года :) PDP-11/45 :
LDD (R3)+,AC3
LDD (R3)+,AC0
ADDD AC0,AC3
Это исходная ссылка на регистры.
Потом начали писать в начале проги, что то а-ля
R0=%0
Потом появился макрос, где это всё определялось, а потом зашили в сам компилятор.
Ну и где-то once upon a time аналогичное, только по шаблону ACx добавили для регистров FPP
- - - Добавлено - - -
Там немного другой формат хранения и вроде как при одинаковом количестве бит у DEC будет на один бит точнее
В частности - в М11, который не от DEC для выполнения команд FPP используется i960 (ЕМНИП - какой именно камень), который как раз по стандарту IEEE - и на этой при вычислении теряются один-два бита
Переделал прогу для работы аккум-аккум:
LDCIF INVAL,%3
STF %3,V1
LDF %3,%0
LDCIF INVAL+2,%3
STF %3,V2
ADDF %0,%3
STCFI %3,IRES
.DPRINT ^"ADD result=",IRES,DEC
;
LDF V2,%2
SUBF %0,%2
STCFI %2,IRES
.DPRINT ^"SUB result=",IRES,DEC
;
LDF V2,%1
MULF %0,%1
STCFI %1,IRES
.DPRINT ^"MUL result=",IRES,DEC
;
LDF V2,%3
DIVF %0,%3
STCFI %3,IRES
.DPRINT ^"DIV result=",IRES,DEC
Далее интересное:
1) - SETF
.RUN FTEST
Enter first value (int dec): 2
Enter second value (int dec): 10
ADD result=00012.
SUB result=00008.
MUL result=00020.
DIV result=00005.
2) - SETD
.RUN FTEST
Enter first value (int dec): 2
Enter second value (int dec): 10
ADD result=00012.
SUB result=00008.
MUL result=00020.
?MON-F-FPU trap 002514
-----------------
команда DIVF память,АС (в отличии от глючной DIVF AC,AC) работает в обоих режимах.
Фортран делает именно DIVF AC,AC
Я, увы с FPP DEC не сталкивался в реале :(
Иначе бы смог бы сказать более...
А пример программы именно с 1973 года, как раз с тех времён, когда FPP у DEC только появился...
И если там AC написано, значит AC и надо писать
.
Ещё подумал, могут быть проблемы с Macro... Может быть - файл битый в области именно инструкций сопроцессора много лет назад.
Так как очень редко плавающую арифметику напрямки в Macro программируют. А всё остальное вполне рабочее. Хотя вряд ли, но кто его знает....
Надо получить листинг да поглядеть, что именно генерит Macro
Фортран-IV показывал ... Ключи для листинга...
Про F77 точно не скажу. Так как я им немного поигрался только. Без плавающей арифметики тогда проку в нём мне было мало.
Хотя должна быть такая возможность.
На самом деле - был прок. В силу (какой-никакой) поддержки структурного IF - было быстрее писать прогу и легче понимать.
Так что я очень быстро перешёл на него с FORTRAN-IV. На Квант-е - после того, как хакнул зависимость OTS от FPP. Ну, точнее - на комбинацию - FORTRAN-77 + MACRO-11 - логика на фортране, всякая системно- или скоростно-зависимая вешь - на MACRO. Но после того, как наткнулся на DSMAC и более-менее его освоил - чистый MACRO-11. Ну а сейчас, когда восстановил свой интерес к PDP-11 - чистый MACRO-11 :)
У F77 - ещё из вкусностей, в версии для RT-11 лучше возможности работы с файлами последовательного доступа :)
И вообще фортран - язык направленный более на счёт.
И когда на кафедре работал - там начальству в основном от меня нужны были расчётные задачи.
Благо, когда есть алгоритм, программа пишется легко :)
По этому F77 в основном только ознакомился из личного любопытства.
И ещё, судя по листингу из F77 наименование регистров для плавающей арифметики менялось...
Вспомнил - под RSX ещё возможно работа не только с файлами последовательного доступа, но и относительного (дурацкий какой-то формат - по сути, похож на формата с фиксированными записями, но для программы это не видно - для неё - записи с переменной длиной с возможностью прямой адресации) и индексного - у записи есть ключи (первичный и, возможно, альтернативные) - и возможен поиск по ключу - что-то типа прообраза баз данных. При этом используется библиотка RMS. Не помню - есть ли она для RT
Ещё раз. Православное название регистров - %0-%7 для CPU и %0-%5 для FPP. Всё остальное - псевдонимы. И ты их (псевдонимы) можешь определять как угодно.
И как определить, что есть %0?
R0 или F0 ?
Библиотеки RMS я не встречал для RT-11 :(
Что было(не считая компиляторов, DECNet и самописных) - Графор(две версии под плоттер и КГД) и специфические библиотеки под КГД.
Исключительно по команде (команда CPU или FPP) и по подтипу команды FPP
Это у меня и исходники есть (некоторой версии) и моя доработка (громко сказано - там всего лишь надо было одну процедуру написать - провести линию, ЕМНИП) под КЦГД и принтер. Причём сделано было два вариант - или сразу рисовать на терминал или вывести в файл, который можно было вывести на терминал или распечатать :)
LDCID R2,F2 из листинга...
LDCID %2.%2 так? очень удобно и читаемо ;)
Графор мне показался громоздким тогда...
Изначально был массив в расширенной памяти по размерам экрана КЦГД(800*240). Уж из него и отправлялось либо на печать , либо экран...
Но с экраном были проблемы... По сему написал точку, чтобы с фонтами текста не возиться, потом линию ...
То есть изначально выводил текстовую часть, затем загрузка программы в КЦГД а потом графику отрисовывал и возвращал управление исходной прошивке ...
Муторно... Но стандартного интерфейса графики для КЦГД тогда не было :(
Сейчас считаю, что нужно мне было самому делать программу графического терминала, либо выпросить готовую с нашего ВЦ :)
Перехватил прерывание по вектору 244, поигрался с делением аккум-аккум double, результат:
1) легальные исключения (деление на 0 и переполнение целого) - прерывание и в FEC легальные значения (соответственно 4 и 6);
2) нормальное деление (аккум-аккум) - прерывание и в FEC ненормальное значение (205, 203б 200б 175 - зависит от чисел);
3) деление 0/число - результат 0 и ПРЕРЫВАНИЯ НЕТ.
- - - Добавлено - - -
.RUN FTEST
Enter first value (int dec): 12
Enter second value (int dec): 144
*** Float operations ***
*** ADD 156 007400
*** SUB 132 007400
*** MUL 1728 007400
*** DIV 12 007400
*** Double operations ***
*** ADD 156 007600
*** SUB 132 007600
*** MUL 1728 007600
!!! Interrupt has been captured !!!
FEC=000205 FEA=002534
*** DIV 0 107604
.RUN FTEST
Enter first value (int dec): 144
Enter second value (int dec): 0
*** Float operations ***
*** ADD 144 007400
*** SUB 65392 007410
*** MUL 0 007404
*** DIV 0 007404
*** Double operations ***
*** ADD 144 007600
*** SUB 65392 007610
*** MUL 0 007604
*** DIV 0 007604
- - - Добавлено - - -
*** операция результат статусный-регистр-FPU
Зато чётко понятно, что это регистры, а не (возможные) ячейки памяти, как в LDCID R2,F2
Я пошёл по другому пути для терминала - сделал расширение для ESC последовательности - нарисовать линию от и до - и дальше написание процедуры линии было тривиально.
Так в Графоре уже встроены шрифты, чего с ними возиться?
- - - Добавлено - - -
Из тестовой программы
В КЦГД загружался модуль расширения, который, собстенно, и интерпретировал пришедшую последовательность. Ну а перед этим несколько вскрыл код КЦГД, чтобы понять - как сделать :)Код:GRF:
.ASCII <33>/H/<33>/J/
.ASCII <33>/</
.ASCII <33>/[1;190;40y/
.ASCII <33>/[1;610;200;190;200y/
.ASCII <33>/[1;610;40y/
.ASCII <33>/[2;200;50;600;190y/
.ASCII <33>/[2;200;190;600;50y/
.ASCII <33>/[2;200;50;200;190;y/
.ASCII <33>/[2;200;50;600;50y/
.ASCII <33>/[2;200;190;600;190y/
.ASCII <33>/[?2;600;50y/
.ASCII <33>/[2;0;0;0;239;799;239;799;0;0;0y/
.ASCII <33>/[?2l/
GRF.LN=.-GRF
- - - Добавлено - - -
Посмотрел код. 0 - это было выставить перо рисования в точку с координатами, 1 - нарисовать точку, а 2 - нарисовать линию, не отрывая перо, а ?2 - переместить первоначально перо, оторвав от бумаги :) Ну и технически, что то типа ?2;600;50 - это аналогично команде 0
Сделал я неправильно, но у меня очень поджимало тогда время :(
Шефу надо было всё ещё вчера :) как всегда...
Потом оказалось, что и так работает и я оказался занят совсем другими вопросами.
Например убил кучу времени на борьбу с КМД. Написал драйвер который прекрасно работал SJ/FB
Он работал и в ХМ, но, зараза, только с задачами в нижней памяти.
И только тут я прочитал, что первые КМД были с ошибкой... :(
А я тогда этого не знал, и не мог понять в чём дело ...
Знал бы, сделал буфер в нижней памяти. Было бы медленнее, затратнее по памяти, но работало бы...
Хотя драйвер DW переделал из драйвера для Электроники-85.
И драйвер прекрасно работал со всеми мониторами.
Обещанный тест. На реальном F11 - проблем нет
- - - Добавлено - - -Код:.DIR HX5:
INSTAL.COM 9P 08-Jun-1985 F77 .SAV 340P 27-Jun-1985
F77COM.MSG 15P 05-Feb-1985 F77OTS.OBJ 130P 27-Jun-1985
SHORT .OBJ 1P 27-Jun-1985 F77MAP.OBJ 32P 27-Jun-1985
F77CVF.OBJ 4P 27-Jun-1985 F77EIS.OBJ 2P 27-Jun-1985
F77NER.OBJ 1P 27-Jun-1985 F77RAN.OBJ 1P 27-Jun-1985
F77TST.FOR 1P 30-Apr-1984 VIRTXM.OBJ 2P 27-Jun-1985
SYSUPD.OBJ 5P 27-Jun-1985 F77DWA.MAC 2P 06-Jun-1985
F77XM .SAV 341P 27-Jun-1985
15 Files, 886 Blocks
2076 Free blocks
.IND HX5:INSTAL
;
; FORTRAN-77/RT-11 Installation procedure for RX50 diskette distribution
; Version 5.0
;
; This procedure will build the working FORTRAN-77 on SY:
;
* Enter the name of the device holding the distribution files [ddn:] [S]: HX5:
;
.ASSIGN HX5: INP
.ASSIGN SY: OUP
;
; The RX50 distribution is supplied with a complete FORTRAN-77 system
; on each diskette; disk 1 contains the SJ/FB version of the compiler
; while disk 2 holds the XM version. If the disk that is now loaded
; does not hold the compiler that you want, replace it now with the
; other diskette.
;
* Is the correct diskette mounted and ready to go? [Y/N D:N]: Y
;
; Do you want your default system library SYSLIB.OBJ to include
;
; 1) only the RT-11 distributed SYSLIB.OBJ (unchanged)
; 2) SYSLIB plus FORTRAN-IV (FORLIB) (unchanged SYSLIB+FORLIB)
; 3) SYSLIB plus FORTRAN-77 (F77OTS) (new combined SYSLIB+F77OTS)
;
* Enter option number: [O]: 1
;
; The F77 OTS will be copied to SY:. The SYSLIB update modules
; in SYSUPD.OBJ will be merged into the FORTRAN-77 OTS library.
;
; Should F77OTS be given the name FORLIB.OBJ to be compatible with the
* linker's /F switch? [Y/N D:N]: Y
;
.LIBR OUP:FORLIB/CREATE INP:F77OTS.OBJ,INP:SYSUPD
;
; Copying the F77 compiler and message file to the system disk...
;
.COPY INP:(F77*.SAV,F77COM.MSG) OUP:
Files copied:
INP:F77.SAV to OUP:F77.SAV
INP:F77XM.SAV to OUP:F77XM.SAV
INP:F77COM.MSG to OUP:F77COM.MSG
;
; There are several optional object modules supplied in the distribution.
; They are explained in detail in the FORTRAN-77/RT-11 Installation Guide.
;
* Do you want to copy any of the optional modules to SY:? [Y/N D:N]:
;
; This completes the FORTRAN-77/RT-11 installation.
;
@ <EOF>
.ASS HX7 DK
.DIR
TEST .FOR 1 20-May-2023
1 Files, 1 Blocks
65466 Free blocks
.F77 TEST,TEST=TEST
.DAT 20-MAY-2023
.TIM 13:11
.DIR
20-May-2023
TEST .FOR 1 20-May-2023 TEST .OBJ 2
TEST .LST 3
3 Files, 6 Blocks
65461 Free blocks
.LINK TEST,SY:FORLIB
.RUN TEST
STOP
.
Вопрос - он у него собран на основе PDP-2011 или на основе реверса Vslav-а?
Тогда ОЧЕНЬ странно, вроде как тест FPP для F11 есть и, ЕМНИП, вроде как тестировалось. Или нет? Память как то настороженно про тестирование FPP
Кстати, я очень предполагал, что на реальном F11 будет всё норм - в самой команде ошибок я не увидел (ну сложно их там в ней допустить, да и F77 аналогичный код генерит), так что с самого начала грешил на FPGA-шный F11, но - мало ли.
- - - Добавлено - - -
Тогда ещё страньше.
Попробую MACRO-овскую прогу запстить
- - - Добавлено - - -
А её текст где-то можно взять?
- - - Добавлено - - -
И JKDC?? и JKDD?? ?
Да, очень странно.
Хотя я уже налетал - только на тестах MMU (и не помню, с какой моделью проца - но в моей теме есть об этом) - тесты без проблем, а драйвер VM ругалсо.
Но раз это на основе реверса - тут только Vslav, скорее всего, сможет помочь - я с его исходниками от реверса пока не возился, в первую очередь из-за того, что они на Verilog-е
- - - Добавлено - - -
Окружать тегами [ CODE ] и [ /CODE ] (пробела после [ и перед ] убрать)
- - - Добавлено - - -
Лог
Код:.DIR *.MAC
20-May-2023
FTEST .MAC 8 20-May-2023 INP .MAC 12 20-May-2023
PRTOD .MAC 5 20-May-2023
3 Files, 25 Blocks
65415 Free blocks
.MAC FTEST
.MAC INP
U 2 .MCALL .PRINT, OCTDIS
?MACRO-E-Errors detected: 1
DK:INP=DK:INP
.MAC PRTOD
.LINK FTEST,INP,PRTOD
.RUN FTEST
Enter first value (int dec): 10
Enter second value (int dec): 20
*** Float operations ***
*** ADD 30 007400
*** SUB 10 007400
*** MUL 200 007400
*** DIV 2 007400
*** NEG 65526 007410
*** ABS 10 007400
*** Double operations ***
*** ADD 30 007600
*** SUB 10 007600
*** MUL 200 007600
*** DIV 2 007600
*** NEG 65526 007610
*** ABS 10 007600
.RUN FTEST
Enter first value (int dec): 12
Enter second value (int dec): 144
*** Float operations ***
*** ADD 156 007400
*** SUB 132 007400
*** MUL 1728 007400
*** DIV 12 007400
*** NEG 65524 007410
*** ABS 12 007400
*** Double operations ***
*** ADD 156 007600
*** SUB 132 007600
*** MUL 1728 007600
*** DIV 12 007600
*** NEG 65524 007610
*** ABS 12 007600
.RUN FTEST
Enter first value (int dec): 144
Enter second value (int dec): 0
*** Float operations ***
*** ADD 144 007400
*** SUB 65392 007410
*** MUL 0 007404
*** DIV 0 007404
*** NEG 65392 007410
*** ABS 144 007400
*** Double operations ***
*** ADD 144 007600
*** SUB 65392 007610
*** MUL 0 007604
*** DIV 0 007604
*** NEG 65392 007610
*** ABS 144 007600
.
А если ввести 0 12?
- - - Добавлено - - -
Должно быть прерывание с FEC=4
Код:.RUN FTEST
Enter first value (int dec): 0
Enter second value (int dec): 12
*** Float operations ***
*** ADD 12 007400
*** SUB 12 007400
*** MUL 0 007404
!!! Interrupt has been captured !!!
FEC=000004 FEA=002520
*** DIV 12 107400
*** NEG 0 107404
*** ABS 0 107404
*** Double operations ***
*** ADD 12 007600
*** SUB 12 007600
*** MUL 0 007604
!!! Interrupt has been captured !!!
FEC=000004 FEA=002520
*** DIV 12 107600
*** NEG 0 107604
*** ABS 0 107604
.