OSDev

для всех
Текущее время: 29 апр 2024, 00:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 04 ноя 2011, 20:52 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Опять путаница в терминологии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 04 ноя 2011, 21:37 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
phantom-84 писал(а):
Опять путаница в терминологии.


Она самая... В частности, именно поэтому, когда писал про формат кода команды IA-32 на Вике, я displacement переводил как отклонение, а не смещение, как обычно это делают: в последнем случае возникает путаница с offset.

Пы.Сы. С круглым постом :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 05 ноя 2011, 10:20 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
displacement - "смещение"; offset - "внутрисегментное смещение", а по нынешним временам - просто "адрес" (не линейный, но часто совпадающий с ним). pavia использовал термины "относительный адрес" и "абсолютный адрес" в соответствии с понятиями "относительная адресация" и "абсолютная адресация", что в принципе весьма логично (я только не понял вот этого: "По крайней мере не все"), т.к. к примеру в инструкциях процессора они кодируются по-разному. Но по-моему такие "относительные адреса" все-таки лучше называть смещениями. Абсолютный адрес от pavia и абсолютный адрес от SII кодируются АБСОЛЮТНО одинаково, просто pavia не стал различать фиксированные (нерелоцируемые/некорректируемые абсолютные) адреса, для которых нет записей в таблице релокации, и (релоцируемые/корректируемые абсолютные) адреса, для которых такие записи есть, а SII это сделал. Как видно, я адреса первого вида называю фиксированными, когда хочу сделать акцент на то, что это неизменяемые адреса.

SII писал(а):
Пы.Сы. С круглым постом :)
Спасибо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 05 ноя 2011, 14:01 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
phantom-84 писал(а):
displacement - "смещение"; offset - "внутрисегментное смещение", а по нынешним временам - просто "адрес" (не линейный, но часто совпадающий с ним)


Ну, displacement и особенно offset далеко не только в IA-32 употребляются, и второй уже не один десяток лет переводится именно как смещение. Насчёт displacement'а стабильного перевода нет, встречается и так, и эдак, но если, например, на мэйнфреймах это пофиг (там есть displacement, но нет offset, если речь идёт об адресации), то на IA-32 оба термина используются вместе, почему и нуждаются в раздельном переводе. Буквальным переводом displacement, конечно, будет как раз смещение, но оно в силу устоявшейся практики прочто ассоциируется с offset'ом, почему я и перевожу его как "отклонение".

Что касается offset'а в случае с ПК, то его называют просто адресом давным-давно, задолго до появления 80386. В случае, если нет полной ясности из контекста, обычно уточняют: "ближний адрес" (near), чем отличают от "дальнего" (far), включающего не только offset, но и селектор сегмента (ну или просто сегмент, если кратко говорить, хотя это, естественно, разные вещи). А вот уточнение "внутрисегментное смещение" встречается крайне редко (во всяком случае, мне практически не попадалось).

Цитата:
pavia использовал термины "относительный адрес" и "абсолютный адрес" в соответствии с понятиями "относительная адресация" и "абсолютная адресация", что в принципе весьма логично (я только не понял вот этого: "По крайней мере не все"), т.к. к примеру в инструкциях процессора они кодируются по-разному


Утверждать не буду, всё ж давным-давно в доку на IA-32 не заглядывал, но разве там есть абсолютная адресация? Вроде бы есть только прямая (вроде MOV EAX, [1234h], где 1234h -- эффективный адрес = смещение (offset) в сегменте данных), а термин "абсолютная" не применяется. Так аналогичная адресация называется и на основной массе других архитектур, где она вообще имеется (хотя на PDP-11 она называется именно абсолютной, однако там технически это будет косвенная автоинкрементная адресация относительно счётчика команд). Относительной же адресацией обычно называется адресация, опирающаяся на значение счётчика команд (он только на IA-32 называется указателем инструкции IP, практически все остальные архитектуры его называют PC). Например, она используется в большинстве команд переходов: частью кода команды является смещение (offset), прибавляемое к значению счётчика команд, в результате чего получается адрес перехода.

Что же касается относительных и абсолютных адресов применительно к загружаемым модулям, то смысл у них вполне однозначен на всех платформах, с которыми мне приходилось сталкиваться. Первый термин означает адрес, значение которого в модуле дано относительно некоторой базы и которое должно корректироваться с учётом реального адреса загрузки, а второй -- адрес, чьё значение не зависит от местоположения модуля, и следовательно, не корректируется. Для первого нередко применяется термин "перемещаемый" (в принципе, я поддерживаю такое употребление, поскольку это позволяет не смешивать его с относительной адресацией в командах, хотя из контекста обычно и так ясно, о чём речь: о целых адресах или же о способах адресации), но вот "фиксированный" для второго, кажется, никогда не встречал -- только абсолютный и (редко) неперемещаемый.

В общем, как обычно: о терминах не спорят, о них договариваются :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 05 ноя 2011, 14:33 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Вот из Intel

Цитата:
Displacement ⎯ A displacement alone represents a direct (uncomputed) offset
to the operand. Because the displacement is encoded in the instruction, this form
of an address is sometimes called an absolute or static address. It is commonly
used to access a statically allocated scalar operand.

...
Цитата:
Jump instruction — The JMP (jump) instruction unconditionally transfers program
control to a destination instruction. The transfer is one-way; that is, a return address
is not saved. A destination operand specifies the address (the instruction pointer) of
the destination instruction. The address can be a relative address or an absolute
address.

A relative address is a displacement (offset) with respect to the address in the EIP
register. The destination address (a near pointer) is formed by adding the displace-
ment to the address in the EIP register. The displacement is specified with a signed
integer, allowing jumps either forward or backward in the instruction stream.
An absolute address is a offset from address 0 of a segment. It can be specified in
either of the following ways:


Про CALL сказано что он аналогичен jmp.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 05 ноя 2011, 14:53 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Значит, используют-таки термин "абсолютный". Ну что ж, буду знать, пока в очередной раз не забуду :) Всё ж широкий кругозор имеет не только плюсы, но и минусы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 05 ноя 2011, 19:26 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
SII писал(а):
Значит, используют-таки термин "абсолютный". Ну что ж, буду знать, пока в очередной раз не забуду :) Всё ж широкий кругозор имеет не только плюсы, но и минусы...

Я displacement-ы называю отступами. Отступ от текущей позиции. В прямом смысле, адресом он не является.
А вдруг вспомнилось. Кажется, ещё употребляют термин "относительный адрес".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DLL Винды: Как?
СообщениеДобавлено: 05 ноя 2011, 20:50 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Тогда уж лучше "сдвиг". Кстати в терминологии Intel displacement - это элемент формируемого эффективного адреса, который при определенных условиях может быть единственной составляющей адреса. Мы тоже часто говорим просто "смещение" (в том числе и "displacement" по-английски), подразумевая адрес внутри сегмента, а не относительно какого-либо базового регистра общего назначения или регистра IP. А когда нужно подчеркнуть, что речь идет о смещении относительно чего-либо, то часто так и говорим "смещение относительно IP", "смещение относительно (адреса) конца команды", "смещение внутри структуры" и т.п. Короче это не проблема, а единичный случай недопонимания, возникший между двумя людьми.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB