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-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 - это эквивалентность символов? Какой ассемблерный код это порождает?

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 06:42 pm
Powered by Dreamwidth Studios