vak: (Default)
[personal profile] vak posting in [community profile] besm6
Обнаружился недостаток стандартного массива: нет простого способа инициализировать массив данных адресами других объектов. Скажем, сделать массив указателей на строки или массив указателей на фукнции. Проблема в том, что настройка адресов выполняется только в секции команд и в секции рассылок. Секция инициализированных данных ("констант") не настраивается.

Единственный штатный способ инициализировать массив указателей это разместить его копию в сегменте команд, и сделать рассылку в секцию BSS. Но при этом расходуется лишнее место в секции команд, а его жалко.

Можно решить эту проблему, введя дополнительный формат инструкций рассылки: пересылать адрес источника, а не его содержимое. В этом случае сохраняется совместимость со стандартным массивом.

Date: 2019-05-17 01:03 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ты упираешься в терминологию. Нет "команд" и "данных", есть "настраиваемые слова" и "константно-инициализированные слова". Настраиваемый инициализированный массив, таким образом, не BSS по определению, и пишется, например, как
                    FOO     :  , NAME,
                    A       :  , SUBP,
                    B       :  , SUBP,
 0000               C       :  , Z00 ,A
  -
 0001                       :  , Z00 ,B
  -
                               , END ,


Вот и проинициализировали массив С адресами A и B.



Date: 2019-05-17 01:05 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Есть ещё забавная фича WEQ:

А:,WEQ,B

Означает, что А приобретает значение содержимого младших разрядов слова по адресу B на момент загрузки. Транзитивное замыкание не делается, т. е. для гарантии правильной работы В само не должно быть WEQ.

Date: 2019-05-17 01:16 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Всё прекрасно работает:
 ABTOKOД  MADLEN
   (1.10.72)
                    *FOO*   :  , NAME,
                    *BAR*   :  , LC  ,1
                    *BAZ*   :  , LC  ,1
 0000                          , Z00 ,
  -                            , Z00 ,*BAR*
 0001                          , Z00 ,
  -                            , Z00 ,*BAZ*
                               , END ,
 ЧИCЛO ПEPФ. 0008      ЧИCЛO OШИБ. OПEPATOPOB  0000
           *PASCAL
                                                       16.05.19 M1
 PASCAL COMPILER 15.0 (15.02.82)
 00001    1  0 PROGRAM MAIN(FOO,BAR,BAZ,OUTPUT);(*=S7*)
 00001    2  1 VAR FOO:RECORD A, B: !INTEGER END;
 00001    3  1 BAR, BAZ: INTEGER;
 00007    4  2 BEGIN
 00010    5  2 BAR := 12345; BAZ := 67890;
 00013    6  2 WRITELN(FOO.A!, FOO.B!);
 00033    7  0 END.
           *NO LO
           *EXECUTE
     12345     67890

Date: 2019-05-17 01:27 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Тогда это не недостаток стандартного массива, а проблема использования формата, сделанного для фон-неймановской архитектуры, в приложении к гарвардской. :)

Если дополнительным битиком удастся сохранить совместимость (в одну сторону) со стандартным массивом, то хорошо.

Date: 2019-05-17 01:33 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Пример использования (играет на том, что в первом слове паскалевской программы стоит переход в конец командной секции, где делаются настройки):
 ABTOKOД  MADLEN
   (1.10.72)
                    *SIZE*  :  , NAME,
                    PROGRAM :  , SUBP,
                    JUMP    :  , WEQ ,PROGRAM
 0000                        13, Z00 ,
  -                            , Z00 ,PROGRAM
 0001                        13, Z00 ,
  -                            , Z00 ,JUMP
                               , END ,
 ЧИCЛO ПEPФ. 0008      ЧИCЛO OШИБ. OПEPATOPOB  0000
           *PASCAL
                                                       16.05.19 M1
 PASCAL COMPILER 15.0 (15.02.82)
 00001    1  0 PROGRAM MAIN(SIZE,OUTPUT);
 00001    2  1 VAR SIZE:RECORD A, B: INTEGER END;
 00007    3  2 BEGIN
 00010    4  2 WRITELN(’ PROGRAM CODE SIZE IS’, SIZE.B - SIZE.A);
 00027    5  0 END.
           *NO LO
           *EXECUTE
 PROGRAM CODE SIZE IS        14

12, BASE, *

Date: 2019-05-17 04:30 am (UTC)
From: [personal profile] mrupor
Вчера я пытался написать на эту тему, но я был немного занят.

Вот, оно - разделенные сегменты и базовый адрес, такие как:

12,BASE,*

Это очень часто встречается во многих программах, своего рода стиль, но он не будет работать на отдельных сегментах. Я надеюсь, что не нужно объяснять. Один из способов решить эту проблему - использовать расширение для модели памяти. например совместимая модель 32K TEXT + DATA а-ля BESM-6 и MESM-6 32K TEXT 32K DATA. Это означает, что нам нужен дополнительный бит или регистр, чтобы управлять им. Режим модели памяти может быть использован в качестве решения для защиты некоторых адресов, пользователей от spervervisor and v.s. ...
Edited Date: 2019-05-17 04:31 am (UTC)

Date: 2019-05-17 04:43 am (UTC)
From: [personal profile] mrupor
Полностью согласен здесь с Лео, с точки зрения загрузчика, у нас есть разметки (memory mark-ups), которые мы должны обновить в памяти: , что именно и как. Нет различий для данных и для текста.

NB: Сегментация может быть вероятной проблемой для 15-битных адресов

Date: 2019-05-17 04:58 am (UTC)
From: [personal profile] mrupor
Tаблица распределения была разработана специально для нужд FORTRAN со всеми вытекающими отсюда последствиями. Она поддерживает все элементы данных FORTRAN: COMMON, DATA, BLOCKDATA и перемещаемые адреса...
Я все еще собираю сведения, один компонент отсутствует на ленте из Дубны, поэтому, чтобы восстановить все значения из некомментированного [:)] исходного кода Madlen, требуется время.

Кстати, кажется, что корни reduol и стандартного массива растут от М-220, Силин сделал то же самое для системного загрузчика М-220 до BESM-6.
Edited Date: 2019-05-17 04:58 am (UTC)

Date: 2019-05-17 05:31 am (UTC)
From: [personal profile] mrupor
Отвечая на вчерашний вопрос о 20 entry points: 20 entries - это ограничение монитора, в библиотеке, ограничений нет, то есть все записи можно добавлять спереди или в конце модуля.

Date: 2019-05-17 04:06 pm (UTC)
From: [personal profile] mrupor
Я бы сказал, что тема поста вводит в заблуждение,т.к. формат объектного модуля имеет достаточно возможностей, чтобы охватить различные случаи, даже такие, когда современный формат не может этого сделать.


 001L                     ТЕSТ1   :  , NАМЕ,
 002L 4001                ТЕSТ2   :  , SUВР,
 0000                     ТЕSТ1   :  , ВSS ,
 0000 1530 00000                   13, UJ  ,
  -   00000 4003                     , Z00 ,ТЕSТ1
 0001 00000 4004                     , Z00 ,ТЕSТ2
  -   00000 4006                     , Z00 ,ТЕSТ1-ТЕSТ2
 0002 00000 4010                     , Z00 ,ТЕSТ1+ТЕSТ2
               3                     , ЕND ,
 ТАБЛИЦА  ОПИСАНИЙ:
 4000  6445636421000000 0000401163000000 0000000041000000
 4003  0000000052100002 0000000052100001 0000400200300001
 4006  0000000052100005 0000400200100001 0000000052100007
 4011  6445636422000000

 Расшифровка: 
 
 4000   TEST1
 4001           <4011> equ ext. subr. name
 4002           label offset 0
 4003           weq value of <4002>
 4004           weq value of <4001>
 4005           equ <4001> - <4002> 
 4006           weq value of <4005>
 4007           equ <4001> + <4002>
 4010           weq value of <4007>
 4011   TEST2


и даже можно сделать следующее:


 001L                     ТЕSТ1   :  , NАМЕ,
 002L 4001                ТЕSТ2   :  , SUВР,
 0000                     ТЕSТ1   :  , ВSS ,
 0000 1530 00000                   13, UJ  ,
  -   00000 4005                     , Z00 ,ТЕSТ1
 0001 00000 4006                     , Z00 ,ТЕSТ2
  -   00000 4010                     , Z00 ,ТЕSТ1-ТЕSТ2
 0002 00000 4012                     , Z00 ,ТЕSТ1+ТЕSТ2
      4003Х               МL      :  , Р*Р ,ТЕSТ1, ТЕSТ2
      4004Х               DV      :  , Р/Р ,ТЕSТ1, ТЕSТ2
  -   00000 4013                     , Z00 ,DV
 0003 00000 4014                     , Z00 ,МL
  -   00000 4016                     , Z00 ,МL - ТЕSТ2
 0004 00000 4020                     , Z00 ,МL - DV
               5                     , ЕND ,
 ТАБЛИЦА  ОПИСАНИЙ:
 4000  6445636421000000 0000402163000000 0000000041000000
 4003  0000400210100001 0000400210300001 0000000052100002
 4006  0000000052100001 0000400200300001 0000000052100007
 4011  0000400200100001 0000000052100011 0000000052100004
 4014  0000000052100003 0000400300300001 0000000052100015
 4017  0000400300300004 0000000052100017 6445636422000000
 +++ СТРУКТУРА ПРОГРАММЫ: +++++++++++++++++++++++++

...


Существует несколько дублированных типов описания (1,2,3,7), которые, возможно, были запланированы или продуманы для разной логики для данных (data) и тext, но на данный момент они обрабатываются одинаково.




Date: 2019-05-18 02:36 pm (UTC)
From: [personal profile] mrupor
Да это, хорошая идея. 18 бит в таблице описание похоже свободный, так что возможно задействовать для описания адресов данных, надо посмотреть, как будут транслироваться команды и данные. В озможно REL базирование потребует 2 регистра? Группы в таблице описание, наверное, лучше пока не трогать.

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 15th, 2026 08:06 pm
Powered by Dreamwidth Studios