vak: (Default)
[personal profile] vak posting in [community profile] besm6
Каждый символ занимает в таблице одно слово. В слове три поля R, T и A:
0000 rrrr ttta aaaa
  • Поле Т - 9 бит - определяет тип символа.
  • Поле A - 15 бит - задаёт адрес или смещение.
  • Поле R - 12 бит - ссылка на другой символ (или длинное имя). Ссылка выглядит как 04000+N. Для некоторых типов символа вместо этого поля старшая половина слова содержит четыре символа имени в кодировке Text.
Пример таблицы символов из файла madlen.dis:
Symbol table:

  4001:  0000 4022 6700 0001  EXTVAR (Common 1 word)
  4002:  5457 4300 4600 0002  LOC (Private 2 words)
  4003:  0000 4020 6600 0003  LOCLONG (Private 3 words)
  4004:  0000 4021 6300 0000  EXTFUNC
  4005:  0000 0000 4007 7754  77754
  4006:  0000 4004 0000 0001  EXTFUNC + 1
  4007:  0000 0000 4100 0014  d14
  4010:  0000 4001 0000 0005  EXTVAR + 5
  4011:  0000 0000 4100 0013  d13
  4012:  0000 0000 4100 0005  c5
  4013:  0000 0000 4000 4567  4567
  4014:  0000 4001 0000 0003  EXTVAR + 3
  4015:  0000 0000 5010 0014  [EXTVAR + 3]
  4016:  0000 4004 0000 0002  EXTFUNC + 2
  4017:  0000 0000 5010 0016  [EXTFUNC + 2]

Long names:

  4020:  5457 4354 5756 4700  LOCLONG
  4021:  4570 6446 6556 4300  EXTFUNC
  4022:  4570 6466 4162 0000  EXTVAR
Исследования показали, что в объектных файлах встречаются следующие типы символов (восьмеричные значения):
  • 000 - смещение от другого символа. Поле R ссылается на другой символ в таблице, поле A добавляет к нему фиксированое смещение.
  • 400 - абсолютный адрес. Поле A и есть значение символа.
  • 410 - перемещаемый адрес. Поле R содержит адрес, попадающий в сегмент команд или констант. При релокации этот адрес будет меняться.
  • 430 - ссылка на внешнее имя, короткое. В старшей половине слова находятся четыре символа имени в кодировке Text.
  • 460 - приватный блок данных, короткое имя в старшей половине. Поле A задаёт размер в словах.
  • 470 - общий блок данных, короткое имя в старшей половине. Поле A задаёт размер в словах.
  • 501 - косвенная ссылка. Поле A задаёт ссылку на другой символ. Содержимое памяти по этому адресу будет использовано в качестве значения (младшие 15 бит).
  • 630 - ссылка на внешнее имя, длинное. Поле R ссылается на длинное имя в кодировке Text.
  • 660 - приватный блок данных, поле R ссылается на длинное имя.
  • 670 - общий блок данных, поле R ссылается на длинное имя.
Единственное, чего здесь не хватает: отдельного типа для экспортирования имён наружу. Надо ввести два типа: экспортируемое короткое имя, и экспортируемое длинное имя. Поле A определяет адрес из сегмента команд или констант.

UPDATE: Добавлены еще шесть типов.
  • 001 - сложение двух символов. Поле A ссылается на первый символ, поле R на второй.
  • 003 - вычитание двух символов. Поле R ссылается на первый символ, поле A на второй.
  • 101 - умножение двух символов. Поле R ссылается на первый символ, поле A на второй.
  • 103 - деление двух символов. Поле R ссылается на первый символ, поле A на второй.
  • 520 - константа, аналогично типу 0400. Поле A определяет значение символа.
  • 521 - отложенное вычисление символа. Поле A ссылается на символ, адрес которого в момент окончательной загрузки определит требуемое значение.

Date: 2019-05-17 09:01 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
ОК; интересно, зачем в косвенной ссылке целых два уникальных бита.

Date: 2019-05-18 12:15 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Можно поэкспериментировать с DTRAN-ом.

Date: 2019-05-18 02:30 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Это логично, что понимает. Интересно, что будет, если в объектном модуле написать не 520, а 400.

Date: 2019-05-18 03:54 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я подозреваю, что разница в том, что одна команда - короткоадресная, а другая - длинноадресная. Собственно, в этом и заключается функциональная разница. Если в полуслове написано 00 007 4001, а соответствующий символ - абсолютная минус единица, то что должно получиться в результате: 00 107 7777, потому что было написано ,AVX,-1, или 00 007 7777, потому что было написано ,Z00,-1?

Паскалю такие трюки не нужны, поэтому он никогда не делает 520, и поэтому в dtran это и не было реализовано.
Edited Date: 2019-05-18 05:12 am (UTC)

Date: 2019-05-18 06:21 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ну да, только для тех, у которых код операции как у короткоадресных, а хочется "длинноадресное" перемещаемое значение. Про остальные можно по коду операции догадаться, что хочется.

А 521 - это типа такая рудиментарная транзитивность? Т.е. не сразу смотри в содержимое слова по адресу, а только после того, как все 501 будут определены?


Date: 2019-05-18 04:35 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Короче говоря, 521 - это эквивалентность символов? Какой ассемблерный код это порождает?

Date: 2019-05-18 09:44 pm (UTC)
From: [personal profile] mrupor
У ассемблера Волкова есть некоторые проблемы с таблицей описания, иногда он перемещает работу, которая может быть выполнена в ассемблере, но выполняет в загрузчике. На это никаких претензий, потому что Волков расширял ассемблер на лету. Некоторые проблемы были исправлены в madlen2. По умолчанию z00 предполагает 15-битный адрес. Не уверен, что это было где-то описанным? Ах, как это, он выглядит диким, но выдает тот же результат при загрузке !
                                                      18.05.19 М1
 АВТОКОД  МАDLЕN
   (1.10.72)
                         ТАS     :  , NАМЕ,
 000000000 4002          Z0      :  , Z00 ,7777В
  -  00000 4004                     , Z00 ,-1
 000100010 4004                     , Z01 ,-1
  -  00020 4004                     , Z02 ,-1
 000200030 4004                     , Z03 ,-1
  -  00040 4004                     , Z04 ,-1
 000300050 4004                     , Z05 ,-1
  -  00060 4004                     , Z06 ,-1
 000400070 4004                     , Z07 ,-1
  -  00100 4004                    0, Z10 ,-1
 000500100 0001                    0, Z10 ,1
  -  00100 4002                    0, Z10 ,7777В
 000600110 4004                    0, Z11 ,-1
  -  00110 4002                     , Z11 ,7777В
 000700170 4004                     , Z17 ,-1
  -  00170 4002                    0, Z17 ,7777В
 001000100 4004                     , Z10 ,-1
  -  00110 4004                     , Z11 ,-1
 001100120 4004                     , Z12 ,-1
  -  00130 4004                     , Z13 ,-1
 001200140 4004                     , Z14 ,-1
  -  00150 4004                     , Z15 ,-1
 001300160 4004                     , Z16 ,-1
  -  00170 4004                     , Z17 ,-1
 00140020 74003                     , Z20 ,-1
  -  0021 74003                     , Z21 ,-1
 00150022 74003                     , Z22 ,-1
  -  0023 74003                     , Z23 ,-1
 00160024 74003                     , Z24 ,-1
  -  0025 74003                     , Z25 ,-1
 00170026 74003                     , Z26 ,-1
  -  0027 74003                     , Z27 ,-1
 00200030 74003                     , Z30 ,-1
  -  0031 74003                     , Z31 ,-1
 00210032 74003                     , Z32 ,-1
  -  0033 74003                     , Z33 ,-1
 00220034 74003                     , Z34 ,-1
  -  0035 74003                     , Z35 ,-1
 00230036 74003                     , Z36 ,-1
  -  0037 74003                     , Z37 ,-1
 00240137 74003                    1, VLМ ,-1
  -  0022 00000
 0025 7777 7777                     , ОСТ ,7777 7777 7777 7777
  -   7777 7777
                                    , ЕND ,
 ТАБЛИЦА  ОПИСАНИЙ:
 4000  6441630000000000 0000000040007777 0000000052007777
 4003  0000000040077777 0000000052077777
 СТРУКТУРА  ПОДПРОГРАММЫ:
          ЗАГОЛОВОК 00001
        ОБОЗНАЧЕНИЯ 00004
               -    00000
               -    00000
     ИДЕНТИФИКАТОРЫ 00000
            КОМАНДЫ 00025
         ГРУППА ВSS 00000
          КОНСТАНТЫ 00001
             ДАННЫЕ 00000
           РАССЫЛКИ 00000
 ЧИСЛО ПЕРФ. 0044      ЧИСЛО ОШИБ. ОПЕРАТОРОВ  0000

  ТМА               МАDLЕN-3.5  18.05.19 М1 17.01.11   СТР    1

 001L                     ТМА     :  , NАМЕ,
 0000 00000 4001          Z0      :  , Z00 ,7777В
  -   00007 4001                     , Z00 ,-1
 0001 00017 4001                     , Z01 ,-1
  -   00027 4001                     , Z02 ,-1
 0002 00037 4001                     , Z03 ,-1
  -   00047 4001                     , Z04 ,-1
 0003 00057 4001                     , Z05 ,-1
  -   00067 4001                     , Z06 ,-1
 0004 00077 4001                     , Z07 ,-1
  -   00107 4001                    0, Z10 ,-1
 0005 00100 0001                     , Z10 ,1
  -   00100 4001                    0, Z10 ,7777В
 0006 00117 4001                    0, Z11 ,-1
  -   00110 4001                     , Z11 ,7777В
 0007 00177 4001                     , Z17 ,-1
  -   00170 4001                     , Z17 ,7777В
 0010 00107 4001                     , Z10 ,-1
  -   00117 4001                     , Z11 ,-1
 0011 00127 4001                     , Z12 ,-1
  -   00137 4001                     , Z13 ,-1
 0012 00147 4001                     , Z14 ,-1
  -   00157 4001                     , Z15 ,-1
 0013 00167 4001                     , Z16 ,-1
  -   00177 4001                     , Z17 ,-1
 0014 0020 74002                     , Z20 ,-1
  -   0021 74002                     , Z21 ,-1
 0015 0022 74002                     , Z22 ,-1
  -   0023 74002                     , Z23 ,-1
 0016 0024 74002                     , Z24 ,-1
  -   0025 74002                     , Z25 ,-1
 0017 0026 74002                     , Z26 ,-1
  -   0027 74002                     , Z27 ,-1
 0020 0030 74002                     , Z30 ,-1
  -   0031 74002                     , Z31 ,-1
 0021 0032 74002                     , Z32 ,-1
  -   0033 74002                     , Z33 ,-1
 0022 0034 74002                     , Z34 ,-1
  -   0035 74002                     , Z35 ,-1
 0023 0036 74002                     , Z36 ,-1
  -   0037 74002                     , Z37 ,-1
 0024 0137 74002                    1, VLМ ,-1
 0025  7777 7777                     , ОСТ ,7777 7777 7777 7777
  -    7777 7777
              26                     , ЕND ,
 ТАБЛИЦА  ОПИСАНИЙ:
 4000  6455410000000000 0000000040007777 0000000040077777
 +++ СТРУКТУРА ПРОГРАММЫ: +++++++++++++++++++++++++
 +              ИМЯ 00001              ВХОДЫ 00001+
 +         ОПИСАНИЯ 00002               SUВР 00000+
 +      КОММЕНТАРИЙ 00000             АRRАУS 00000+
 + РЕЗЕРВНАЯ ГРУППА 00000     ИДЕНТИФИКАТОРЫ 00001+
 +ДЛ.ИДЕНТИФИКАТОРЫ 00000              DЕВUG 00000+
 +          КОМАНДЫ 00025              ХТЕХТ 00000+
 +       ГРУППА ВSS 00000         ИНСТРУКЦИИ 00044+
 +        КОНСТАНТЫ 00001   ГЛОБ.БАЗИРОВАНИЕ 00000+
 +             DАТА 00000               DISР ******
 +         РАССЫЛКИ 00000              МОDЕL ******
 ЧИСЛО ПЕРФ.     44      ЧИСЛО ОШИБ. ОПЕРАТОРОВ  00

  ИДЕНТИФИКАТОРЫ :
 ------------------

 Z0       :   00000


Edited Date: 2019-05-19 12:04 am (UTC)

Date: 2019-05-18 02:32 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Там такое качество, что можно закопать обратно, к сожалению.

Date: 2019-05-18 04:36 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
У нас есть исходники DTRAN, так что статья вряд ли скажет что-то новое.

Profile

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

December 2025

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

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

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