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 ссылается на символ, адрес которого в момент окончательной загрузки определит требуемое значение.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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 03:12 pm
Powered by Dreamwidth Studios