Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Помогите разобраться с динамической памятью 
:(
    Опции темы
СЭНСЭЙ
Дата 5.2.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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гБ.
Разъясните пожалуйста.
PM MAIL   Вверх
marinovsoft
Дата 6.2.2009, 16:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.1.2009
Где: Кемерово

Репутация: нет
Всего: нет



Из книги "Turbo Pascal 7.0 практика программирования". издание 7-е, переработанное. Фаронов В.В. (стр. 117)
Цитата

...Как известно, 20-разрядный адрес на IBM AT в реальном режиме и на компьютерах IBM PC|XT образуется путем сложения двух 16-разрядных слов - сегмента и смещения. Перед сложением сегмент смещается на 4 разряда влево (умножается на 16), что и обеспечивает 20-разрядный результат сложения - адрес конкретного байта...


Найдите эту книжку, в сети сканы есть 100%.

И найдите какую-нибудь книжку по ассемблеру для DOS. Прочитайте там про режимы адресации, а также про работу процессора в реальном (real mode) и защищеном режиме (protected mode).

Удачи!
PM MAIL WWW ICQ   Вверх
Фантом
Дата 6.2.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(marinovsoft @  6.2.2009,  16:25 Найти цитируемый пост)

Найдите эту книжку, в сети сканы есть 100%.

И найдите какую-нибудь книжку по ассемблеру для DOS.


А еще лучше - пропустите в книжке все, что касается низкоуровневого программирования (прямой работы с памятью, обращения к прерываниям и т.д.), и никогда о нем не вспоминайте. Оно потеряло актуальность много лет назад.
PM   Вверх
marinovsoft
Дата 6.2.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.1.2009
Где: Кемерово

Репутация: нет
Всего: нет



Цитата

А еще лучше - пропустите в книжке все, что касается низкоуровневого программирования (прямой работы с памятью, обращения к прерываниям и т.д.), и никогда о нем не вспоминайте. Оно потеряло актуальность много лет назад.


Вы еще скажите, чтобы он стер этот Turbo Pascal проклятый и установил Delphi, да и не какие-то там старые 5-6-7, а сразу - delphi.net 2007 (или какие они там последние?).

Заранее ссори модераторам, наболело:
[offtop]
Вот чего не терплю, так это когда человек спрашивает (т.е. задает прямой вопрос), а ему говорят: "это все фуфло, так не делай, делай как я сказал, я вУмный!!!"
[/offtop]
PM MAIL WWW ICQ   Вверх
Фантом
Дата 6.2.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(marinovsoft @  6.2.2009,  17:28 Найти цитируемый пост)

Вы еще скажите, чтобы он стер этот Turbo Pascal проклятый и установил Delphi, да и не какие-то там старые 5-6-7, а сразу - delphi.net 2007 (или какие они там последние?).


Первую часть - стереть TP - действительно можно и посоветовать. А вторую - нет. Надо переходить на аналогичный инструмент, поэтому в качестве заменителя можно посоветовать Free Pascal. 

 smile Бывают вопросы, которые необходимо сопровождать пояснением, зачем задающему вопрос такое надо. В данной ситуации единственное разумное объяснение - глупый преподаватель, заставляющий учить безнадежно устаревшие вещи (и оно в вопросе отсутствует). Во всех остальных случаях прямой ответ на вопрос приведет только к тому, что спрашивавший проделает кучу совершенно бесполезной работы, пытаясь разобраться в потрохах компилятора (даже не языка) 17-летней давности, а также железа и ОС, которые давно не используются никогда, кроме особо специальных случаев.
PM   Вверх
marinovsoft
Дата 6.2.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.1.2009
Где: Кемерово

Репутация: нет
Всего: нет



Предположим, что это действительно студент и его "глупый преподаватель" заставляет учить tp, платформу, ось и компилятор, которые безнадежно устарели. Тут же Вы предлагаете  заменить компилер на FPC. Я не сомневаюсь что в таком случае они (студенты) встречаются и с uses graph;. Я вот что-то не припомню такого в FPC. Следовательно, это уже не аналогичный инструмент. Тогда бы tmt32 под ms-dos... хотя опять тут ms-dos

tp под ms-dos это довольно простой инструмент для изучения программирования.

А вообще, лучше перебраться куда-нибудь в другое место для спора (аська в профиле), пока нас модераторы за оффтоп не зарезали...

Чуть не забыл. При чем здесь "потроха компилятора", когда такая адресация вообще в любой среде в реальном режиме процессора???

Это сообщение отредактировал(а) marinovsoft - 6.2.2009, 18:21
PM MAIL WWW ICQ   Вверх
СЭНСЭЙ
Дата 6.2.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Та полно вам. Я и на делфи пишу для себя и работал 3 года на нете.
Просто мне действительно интересно.
Вернусь к моему вопросу:
Фаронова я как раз читал. Причем усердно. И то что про сегмент и смещение написано.
Так что не нужно мне цитировать.
Вопрос то открытый остается не смотря на все что написано в книге.
Зачем 2 перменных 16разрядных что бы обратиться к адресу, обращение к которому требует 20разрядной переменной?

Вообще я так подумал (ну я конечно еще почитаю про реал и сейф моды, давно читал - уже забыл) - наверное это было связано с
ограниченными возможностями операционки или железа, а сам турбопаскаль 7й позволяет адресовать 4 гига.
Просто остальные 12 разрядов просто не использовались на практике.
Прав я или нет?

Добавлено через 2 минуты и 9 секунд
Вообще люблю под досом 6,22 посидеть. КАЙФ!!!
PM MAIL   Вверх
Фантом
Дата 6.2.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(СЭНСЭЙ @  6.2.2009,  19:02 Найти цитируемый пост)
Вообще я так подумал (ну я конечно еще почитаю про реал и сейф моды, давно читал - уже забыл) - наверное это было связано с ограниченными возможностями операционки или железа,


Скорее, с сочетанием двух причин. Во-первых, необходимостью адресовать только 1 мегабайт памяти (это времена, когда "640 килобайт всем достаточно"), во-вторых, 16-разрядностью процессора Intel 8086 (выделять 20 бит для адресации было неудобно - нужно либо 16, либо 32). 

Адресуемых 4 Гб не получается, поскольку тогда же в схему адресации памяти была заложена особенность - соседние сегменты начинаются на расстоянии 16 байт друг от друга (и, соответственно, сегменты перекрываются). Сделано это было ради того, чтобы команды или данные, не занимающие полностью сегмент в 64 кб, не "съедали" при этом пустое место. Как я уже писал выше, память больше мегабайта никого не интересовала, а потеря десятка килобайт на выравнивании сегментов была куда критичнее.

P.S. Но мой вопрос все-таки никуда не делся - зачем Вам все это? Ностальгия замучала?  smile 
PM   Вверх
СЭНСЭЙ
Дата 6.2.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Та нет, разъясню подробней:
вообще с давних времен учил паскаль, потом делфи, но все с конкретными целями и поэтому не углублялся во все, а лишь искал нужное и применял.
Ну работал и с нетом и js и html короче... работал программером доморощенным.
Ага...

Недавно понадобилось написать софт под одну плату. Есть примеры на делфи и мануалы. Появились местами вопросы.
По опыту знаю, что лучше все таки в этом случае подучить мат часть с азов.
Вот и сел перечитывать по паскалю книгу очередной раз. Но про память я вообще раньше пропускал потому и вопросов появилось много.
И вообще мне это просто нравится. Люблю всякие логические задачи решать. А с памятью их появилось куча )

Добавлено через 2 минуты и 46 секунд
И еще тогда вопрос:
Получается что сегменты друг друга перекрывают?
Если так то получается что к одной и той же ячейке памяти можно обратиться по разным сочетаниям...
то есть адрес одной и той же ячейки можно задать разными сочетаниями сегмента и смещения?
PM MAIL   Вверх
Фантом
Дата 6.2.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(СЭНСЭЙ @  6.2.2009,  23:20 Найти цитируемый пост)
Получается что сегменты друг друга перекрывают?
Если так то получается что к одной и той же ячейке памяти можно обратиться по разным сочетаниям...
то есть адрес одной и той же ячейки можно задать разными сочетаниями сегмента и смещения? 


Да, именно так. У каждой ячейки памяти (кроме тех, которые попадают в первые или в последние 64 кб) может быть 4096 различных адресов.
PM   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1272 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.