|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 14, 2004 19:57:17 Книга "Ассемблер для DOS, Windows и UNIX". Там написано следующее: "В реальном режиме селектор любого сегмента равен адресу его начала, деленому на 16. Чтобы получить адрес в памяти, 16-битное смещение складывают с этим селектором, сдвинутым предварительно влево на 4 разряда. Таким образом, оказывается, что максимальный доступный адрес в реальном режиме (2^20)-1 = 1 048 575. Для сравнения, в защищенном режиме адрес начала для каждого сегмента хранится отдельно, так что возможно 2^46 (64 терабайта) различных логических адресов в формате сегмент:смещение (программа может определить до 16384 сегментов, каждый из которых до 4 Гб), хотя реально процессор может адресоваться только к 4 или 64 (для Pentium Pro) гигабайтам памяти." Вопрос: ПОЧЕМУ ИМЕННО (2^20)-1 = 1 048 575? Откуда взялась именно 20-я степень? |
|
|
Дата: Янв 14, 2004 20:06:20 D1g174LM4n14c Тебе сама цифра интересует??? :))) Ну потому что Билли был уверен, что 20разрядной шины достаточно. P.S Интересно а как ты ник свой запоминаешь? |
|
|
Дата: Янв 14, 2004 20:07:32 Интересно а как ты ник свой запоминаешь? :)))))))))))))))))))))))))))))))))))))))))) |
|
|
Дата: Янв 14, 2004 21:26:06 Edmond Я имею ввиду не это... Прочитай внимательно выдержку из книги... "Чтобы получить адрес в памяти, 16-битное смещение складывают с этим селектором, сдвинутым предварительно влево на 4 разряда. Таким образом, оказывается, что максимальный доступный адрес в реальном режиме (2^20)-1 = 1 048 575." То есть (2^20)-1 выплывает из-за этих расчетов с сегмент:смещение.... P.S. Про ник: кодеры все помнят :)) А если серьезно, мой ник DigitalManiac - просто я его через цифры пишу (ведь Digital!). |
|
|
Дата: Янв 14, 2004 23:31:03 На самом деле максимальный может быть 0x10FFEF = 1 114 095, правда только на 386 и выше, и с отключенным A20. А если шина 20 разрядная, то макс. адрес есть 2^20-1, или всего 2^20 возможных адресов. 2 Edmond: при чем тут Билли? |
|
|
Дата: Янв 14, 2004 23:54:57 D1g174LM4n14c 16 бит в адресе дает 216=65536 вариантов. т.е. от 0 до 65535. (эта величина DWORD регистра) Сдвигаем на 4 бита влево: селектор: xxxx xxxx xxxx xxxx <- добавляем сюда 4 разряда селектор: xxxx xxxx xxxx xxxx 0000 - получили 16+4=20-разрядный адрес 20 бит в адресе могли бы дать 220 вариантов. НО! младшие 4 бита - нули. (т.е. вариантов будет меньше) Теперь читай: "смещение складывают с этим селектором". Смещение ни куда не сдвинуто, т.е. теперь может получиться: реальный адрес: xxxx xxxx xxxx xxxx xxxx - вот и 220 P.S. Я перевел один туториал, посмотри вот здесь, может что полезное есть, чего нет у Зубкова. Скажешь что думаешь? :) |
|
|
Дата: Янв 15, 2004 12:03:27 Спасибо. Понял. А при сложении 20 битного адреса (полученного из селектора путем его сдвига влево на 4 бита) с 16 битным смещением не может получиться величина, большая чем 20 битная? Ведь по идее - может. Тогда планку надо поднимать (до 21 бита?). Или я где-то не доглядел? P.S. Тутор щас прочту - потом напишу сюда комменты ;) |
|
|
Дата: Янв 15, 2004 12:30:07 D1g174LM4n14c Ты уже сам все понял. В этих несчастных 64 кило-16 байт и заключалась когда-то проблема совместимости с 8086. Аппаратно лечится сбросом 20-й линии. |
|
|
Дата: Янв 15, 2004 12:40:37 vaskovich D1g174LM4n14c Я имею ввиду не это... А я имею ввиду именно то, что сказал. при чем тут Билли? Есть такая сказка, что мол когда IBM делали, то мол Билли утверждал, что 1M -- ЭТО УЙМА ПАМЯТИ :) |
|
|
Дата: Янв 15, 2004 13:12:02 Тогда планку надо поднимать (до 21 бита?) Там "выше" этой планки адресов-то было бы ~64К - чего от них толку? Про 21-бит - это линия A20 уже написал Valery P.S. Правильнее - там напиши. |
|
|
Дата: Янв 15, 2004 13:59:01 Я посчитал так: есть сегмент и смещение. все по 16 бит. Как писалось выше, адрес сегмента задается 16 битами (деленный на 16). При сдвиге влево - мы получаем этот адрес умноженный на 16... Что впрочем неважно... Есть максимум: сегмент: 1111 1111 1111 0000 смещение: 1111 1111 1111 1111 сумма этого: 1 1111 1111 1110 1111 То есть, 21 бит! Значит можно указать такой адрес, который выйдет за границы (2^20)-1. Что тогда будет? |
|
|
Дата: Янв 15, 2004 14:29:15 · Поправил: Valery PC взорвется. P.S. То же, что и при переполнении в GPR. Только что EFLAGS не апдейтится:) |
|
|
Дата: Янв 15, 2004 14:30:04 На 8086 нет 21-го бита. Там он просто "пропадал" Потом этот бит появился, вместе с необходимостью управления 20-й линией шины адреса, те 21-бита (там нумерация идет от 0) ЗЫ Этому Билли сейчас бы эту "уйму памяти" в компьютер :) |
|
|
Дата: Янв 17, 2004 11:13:15 Тут помимо своих слов я повторю уже то, что сказано, в частности S_T_A_Sом. Просто хочется раз и навсегда прояснить арифметику о которой ты спросил. D1g174LM4n14c, 1. Для начала чётко скажем, в цитате которую ты привёл подразумевается 20и разрядная адресная шина. Или любая шина с другой разрядностью но только с 20ю "включёнными" линиями. Как только линий будет больше - всё уже не будет соответсвовать действительности. 2. Шина у нас 20и разрядная, адрес значит полный тоже. Вспомним свойства чисел в позиционной системе: а)Мощность множества всех чисел с основанием x и y разрядов. Или проще колличество возможных чисел представимых y разрядами в позиционной системе с основанием x. она равна x^y. Т.е. например 10^3 трёхразрядных чисел в десятичной системе или 2^8 восьмиразрядных в двоичной. Шина у нас 20и разрядная, представимых на ней адресов 2^20,или 1 мб, как верно заметил S_T_A_S. б)Максимально возможное число представимое в позиционной сисеме с основание x y-разрядами. Оно равно x^y -1. Т.е. максимальное ТрёхЗначаное число в десятичной 999=10^3-1. 4xЗначное в бинарной: 1111=2^4-1 или 16-1=15 3. Арифметика или сложение компонентов адреса. Во многих книгах включая упомянутую, даётся неверное (неполное) понятие о формуле вычисления реального адреса как segment*16+offset. В компьютерах с фиксированной разрядной сеткой не может быть просто сложения целочисленных операндов в дополнительном коде. Всегда в наличии СЛОЖЕНИЕ ПО МОДУЛЮ. Модуль определяется как 2 в степени имеющихся в распоряжении результата-ёмкости разрядов. У нас здесь результат 20и разрядную ёмкость имеет, поэтому происходит сложение по модулю 2^20. Т.е. точная формула (segment*16+offset) mod 2^20. Можно и по другому это воспринимать - старшие биты (в данном случае может быть только один такой бит) которые невлазят в разрядную сетку - теряются. Получил ты при таком сложении например 1000FEh реально результ будет 000FEh. 4. Каждому 20и разрядному адресу выдаваемому на шину, на самом деле соответсвует пачка логических адресов. Действительно, например 00020h мы може получить и как 0000(*10h) + 0020h (0000:0020h) и как 0001(*10h) + 0010h (0001:0010h) и как 0002(*10h) + 0000h (0002:0000h) и как (внимание!) FFFF(*10h) + 0030h (FFFF:0030h) Нетрудно увидеть, что пересекающихся разрядов тут будет 12 и соответсвенно каждый 20и разрядный адрес может быть представлен любым их 4 кб (2^12) возможныx логических адресов. Получение адреса с переполнением (заворачивание) вызывает исключение в современных процах при 20и битной реальной адресации. Раньше можно было использовать для разных хитростей. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.103 |