tyomitch писал(а):Approximator писал(а):tyomitch писал(а):BP писал(а):Не думаю что для подсчёта линейного адреса нужен Си. По моему это можно сделать так: Сегмент * Длина Сегмента + Смещение.
Что за бред, о каких вообще сегментах в плоской модели памяти идёт речь?
Сегменты есть ВСЕГДА. Иначе не бывает. В "плоской модели" организации памяти ВСЕГДА существует, КАК МИНИМУМ ТРИ СЕГМЕНТА: сегмент данных, сегмент кода, сегмент стека...
На самом же деле, в "плоской модели" огранизации памяти в одной программе бывает более трёх сегментов. Другой вопрос, что АДРЕСНОЕ ПРОСТРАНСТВО плоское. То есть адресация внутри этого адресного пространства сквозная. Однако, друзья мои, и тут бывают различия. Как вы думаете, если адресовать относительно ds и fs регистров в "плоской модели" организации памяти получишь одинаковый результат? Ну-ну... попробуйте на досуге, видимо, сильно удивитесь...
P.S. Когда-то сегментация была связана с ограничениями адресных возможностей процессоров. Сегодня сегментация связана с уровнем организации прав доступа к различным сегментам адресного пространства программы.
Я знал, что кто-нибудь придерётся. Но думал, что BP, а не ты.
Есть два разных понятия - сегменты и сегментные регистры. Когда-то они были связаны, сейчас сегментов нет и поэтому связи между ними нет.
Ты что издеваешься? Или просто у тебя такое чувство юмора? Как нет сегментов?
IA-32 Intel Archtecture Software Developers Manual, Volume 3 писал(а):The simplest memory model for a system is the basic “flat model,” in which the operating system and application programs have access to a continuous, unsegmented address space. To the greatest extent possible, this basic flat model hides the segmentation mechanism of the architecture...
To implement a basic flat memory model with the IA-32 architecture, at least two segment descriptors must be created, one for referencing a code segment and one for referencing a data segment (see Figure 3-2). Both of these segments, however, are mapped to the entire linear
address space: that is, both segment descriptors have the same base address value of 0 and the same segment limit of 4 GBytes.
Я говорил именно про то, что запись F000:0000 не имеет смысла в Win32, потому что номер "сегмента" не задаёт место памяти, а задаёт как раз права.
Да? А что вопрос шёл только о сегментных регистрах? Вопрос не только о сегментных селекторах, но и о линейном адресе. Вот ещё одна цитата оттудаже:
IA-32 Intel Archtecture Software Developers Manual, Volume 3 писал(а):To select the various table entries, the linear address is divided into three sections:
• Page-directory entry—Bits 22 through 31 provide an offset to an entry in the page directory. The selected entry provides the base physical address of a page table.
• Page-table entry—Bits 12 through 21 of the linear address provide an offset to an entry in the selected page table. This entry provides the base physical address of a page in physical memory.
• Page offset—Bits 0 through 11 provides an offset to a physical address in the page.
Memory management software has the option of using one page directory for all programs and tasks, one page directory for each task, or some combination of the two.
Так, что BP был на правильном пути, при составлении своей формулы. Конечно ошибся, но ведь не в том, что нет сегментов, а лишь в способе вычисления физического адреса. Так?
Approximator, про нервную систему червей я скорее всего знаю меньше тебя, но уж про систему адресации - достаточно.
Возможно. Но, ты меня не правильно понял. Я не пытаюсь оббегать форум с линейкой и выяснять у кого длиннее. Если я ошибусь и ты меня поправишь, то сколько бы я ни знал, я буду лишь признателен тебе за замеченную неточность.
Не надо вести себя так некрасиво.
Извини, если обидел. Не со зла, я Мир?