Типы символов в стандартном массиве
May. 17th, 2019 12:09 amКаждый символ занимает в таблице одно слово. В слове три поля R, T и A:
0000 rrrr ttta aaaa
- Поле Т - 9 бит - определяет тип символа.
- Поле A - 15 бит - задаёт адрес или смещение.
- Поле R - 12 бит - ссылка на другой символ (или длинное имя). Ссылка выглядит как 04000+N. Для некоторых типов символа вместо этого поля старшая половина слова содержит четыре символа имени в кодировке Text.
Пример таблицы символов из файла madlen.dis:
UPDATE: Добавлены еще шесть типов.
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 ссылается на длинное имя.
UPDATE: Добавлены еще шесть типов.
- 001 - сложение двух символов. Поле A ссылается на первый символ, поле R на второй.
- 003 - вычитание двух символов. Поле R ссылается на первый символ, поле A на второй.
- 101 - умножение двух символов. Поле R ссылается на первый символ, поле A на второй.
- 103 - деление двух символов. Поле R ссылается на первый символ, поле A на второй.
- 520 - константа, аналогично типу 0400. Поле A определяет значение символа.
- 521 - отложенное вычисление символа. Поле A ссылается на символ, адрес которого в момент окончательной загрузки определит требуемое значение.
no subject
Date: 2019-05-17 08:22 pm (UTC)Косвенные ссылки также могут быть и на абсолютные, и на перемещаемые адреса.
no subject
Date: 2019-05-17 08:24 pm (UTC)Но из сишного кода проще анализировать тип символа сразу по всему полю T, чем по отдельным битам.
no subject
Date: 2019-05-17 09:01 pm (UTC)no subject
Date: 2019-05-17 09:17 pm (UTC)no subject
Date: 2019-05-17 09:42 pm (UTC)400 - CIDENT
200 - CLONGNAM
100 - CPRT
070 - MTYPE
002 - CMINUS
001 - CDEF
no subject
Date: 2019-05-18 12:15 am (UTC)no subject
Date: 2019-05-18 12:43 am (UTC)test: ,name, ,atx , -1 ,z00 , -1 ,end ,Второй оператор детранслируется неправильно. Тут как раз задействован символ типа 520.Сейчас попробую родной DTRAN.no subject
Date: 2019-05-18 12:46 am (UTC)ТЕSТ : , NАМЕ, DТRАN /01.06.84/ 0000 , АТХ ,-1 - , Z00 ,-1 , ЕND ,no subject
Date: 2019-05-18 01:15 am (UTC)https://inis.iaea.org/collection/NCLCollectionStore/_Public/05/120/5120725.pdf
no subject
Date: 2019-05-18 02:30 am (UTC)no subject
Date: 2019-05-18 02:32 am (UTC)no subject
Date: 2019-05-18 03:11 am (UTC)TEST: c0: 00 000 4001 atx 77777 00 000 4002 atx 77777 Symbol table: 4001: .... .... 4007 7777 77777 4002: .... .... 5207 7777 77777no subject
Date: 2019-05-18 03:54 am (UTC)Паскалю такие трюки не нужны, поэтому он никогда не делает 520, и поэтому в dtran это и не было реализовано.
no subject
Date: 2019-05-18 05:52 am (UTC)no subject
Date: 2019-05-18 06:21 am (UTC)А 521 - это типа такая рудиментарная транзитивность? Т.е. не сразу смотри в содержимое слова по адресу, а только после того, как все 501 будут определены?
no subject
Date: 2019-05-18 06:53 am (UTC)В статье упоминается некая программа TAKESTAR. Такое имя присутствует у нас на дисках 2x48.
no subject
Date: 2019-05-18 08:41 am (UTC)В обычном случае, когда объектные файлы линкуются в кучу, но остаются перемещаемыми, ссылки на внешние имена (типа 630 или 430) разрешаются и превращаются в перемещаемые адреса. То есть поле команды типа 7400X становится 4000Y. Символ типа 521 запрещает это делать, аж пока не начнётся настройка абсолютных адресов.
no subject
Date: 2019-05-18 04:35 pm (UTC)no subject
Date: 2019-05-18 04:36 pm (UTC)no subject
Date: 2019-05-18 05:54 pm (UTC)Кроме Z0x и Z1x, я не нашёл способа породить символ 521.
no subject
Date: 2019-05-18 09:44 pm (UTC)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 : 00000no subject
Date: 2019-05-19 12:06 am (UTC)https://www.youtube.com/watch?v=RusSiFDquZU