![]() |
Модераторы: volvo877, Snowy, MetalFan |
![]() ![]() ![]() |
|
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Всем привет.
Изучаю раздел Турбо Паскаля 7.0 "динамическая память" возник вопрос: в литературе сказано, что указатель содержит адрес в виде сегмента и смещения, значения которых тип Word. Сегмент - участок памяти в 2^16=65636 байт Сегмент в совокупности со смещением могут адресовать до 1мбайта памяти и составляют вместе 20 разрядов - 16 разрядов сегмент и смещенные на 4 разряда вправо 16 разрядов смещения. Остается мне лично не понятно - почему тогда функцией ptr(seg,ofs):pointer можно задать адрес по сегменту и смещению, когда seg(65636) * ofs(65636) получается 2^32=4гБ. Разъясните пожалуйста. |
|||
|
||||
marinovsoft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 25.1.2009 Где: Кемерово Репутация: нет Всего: нет |
Из книги "Turbo Pascal 7.0 практика программирования". издание 7-е, переработанное. Фаронов В.В. (стр. 117)
Найдите эту книжку, в сети сканы есть 100%. И найдите какую-нибудь книжку по ассемблеру для DOS. Прочитайте там про режимы адресации, а также про работу процессора в реальном (real mode) и защищеном режиме (protected mode). Удачи! |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
А еще лучше - пропустите в книжке все, что касается низкоуровневого программирования (прямой работы с памятью, обращения к прерываниям и т.д.), и никогда о нем не вспоминайте. Оно потеряло актуальность много лет назад. |
|||
|
||||
marinovsoft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 25.1.2009 Где: Кемерово Репутация: нет Всего: нет |
Вы еще скажите, чтобы он стер этот Turbo Pascal проклятый и установил Delphi, да и не какие-то там старые 5-6-7, а сразу - delphi.net 2007 (или какие они там последние?). Заранее ссори модераторам, наболело: [offtop] Вот чего не терплю, так это когда человек спрашивает (т.е. задает прямой вопрос), а ему говорят: "это все фуфло, так не делай, делай как я сказал, я вУмный!!!" [/offtop] |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Первую часть - стереть TP - действительно можно и посоветовать. А вторую - нет. Надо переходить на аналогичный инструмент, поэтому в качестве заменителя можно посоветовать Free Pascal. ![]() |
|||
|
||||
marinovsoft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 25.1.2009 Где: Кемерово Репутация: нет Всего: нет |
Предположим, что это действительно студент и его "глупый преподаватель" заставляет учить tp, платформу, ось и компилятор, которые безнадежно устарели. Тут же Вы предлагаете заменить компилер на FPC. Я не сомневаюсь что в таком случае они (студенты) встречаются и с uses graph;. Я вот что-то не припомню такого в FPC. Следовательно, это уже не аналогичный инструмент. Тогда бы tmt32 под ms-dos... хотя опять тут ms-dos
tp под ms-dos это довольно простой инструмент для изучения программирования. А вообще, лучше перебраться куда-нибудь в другое место для спора (аська в профиле), пока нас модераторы за оффтоп не зарезали... Чуть не забыл. При чем здесь "потроха компилятора", когда такая адресация вообще в любой среде в реальном режиме процессора??? Это сообщение отредактировал(а) marinovsoft - 6.2.2009, 18:21 |
|||
|
||||
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Та полно вам. Я и на делфи пишу для себя и работал 3 года на нете.
Просто мне действительно интересно. Вернусь к моему вопросу: Фаронова я как раз читал. Причем усердно. И то что про сегмент и смещение написано. Так что не нужно мне цитировать. Вопрос то открытый остается не смотря на все что написано в книге. Зачем 2 перменных 16разрядных что бы обратиться к адресу, обращение к которому требует 20разрядной переменной? Вообще я так подумал (ну я конечно еще почитаю про реал и сейф моды, давно читал - уже забыл) - наверное это было связано с ограниченными возможностями операционки или железа, а сам турбопаскаль 7й позволяет адресовать 4 гига. Просто остальные 12 разрядов просто не использовались на практике. Прав я или нет? Добавлено через 2 минуты и 9 секунд Вообще люблю под досом 6,22 посидеть. КАЙФ!!! |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Скорее, с сочетанием двух причин. Во-первых, необходимостью адресовать только 1 мегабайт памяти (это времена, когда "640 килобайт всем достаточно"), во-вторых, 16-разрядностью процессора Intel 8086 (выделять 20 бит для адресации было неудобно - нужно либо 16, либо 32). Адресуемых 4 Гб не получается, поскольку тогда же в схему адресации памяти была заложена особенность - соседние сегменты начинаются на расстоянии 16 байт друг от друга (и, соответственно, сегменты перекрываются). Сделано это было ради того, чтобы команды или данные, не занимающие полностью сегмент в 64 кб, не "съедали" при этом пустое место. Как я уже писал выше, память больше мегабайта никого не интересовала, а потеря десятка килобайт на выравнивании сегментов была куда критичнее. P.S. Но мой вопрос все-таки никуда не делся - зачем Вам все это? Ностальгия замучала? ![]() |
|||
|
||||
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Та нет, разъясню подробней:
вообще с давних времен учил паскаль, потом делфи, но все с конкретными целями и поэтому не углублялся во все, а лишь искал нужное и применял. Ну работал и с нетом и js и html короче... работал программером доморощенным. Ага... Недавно понадобилось написать софт под одну плату. Есть примеры на делфи и мануалы. Появились местами вопросы. По опыту знаю, что лучше все таки в этом случае подучить мат часть с азов. Вот и сел перечитывать по паскалю книгу очередной раз. Но про память я вообще раньше пропускал потому и вопросов появилось много. И вообще мне это просто нравится. Люблю всякие логические задачи решать. А с памятью их появилось куча ) Добавлено через 2 минуты и 46 секунд И еще тогда вопрос: Получается что сегменты друг друга перекрывают? Если так то получается что к одной и той же ячейке памяти можно обратиться по разным сочетаниям... то есть адрес одной и той же ячейки можно задать разными сочетаниями сегмента и смещения? |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Да, именно так. У каждой ячейки памяти (кроме тех, которые попадают в первые или в последние 64 кб) может быть 4096 различных адресов. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |