Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
assemb
64 / 64 / 1
Регистрация: 14.04.2010
Сообщений: 170
1

Особенности сегментной памяти

04.09.2010, 11:19. Просмотров 990. Ответов 12
Метки нет (Все метки)

Всё интересует один вопрос из раздела основ. По идее понимание его приходит только с практикой. А так как я самоучка, разсмотрения этого вопроса ранее не приходилось! Кароче меня интересует адресация, пока что только реальная. Тоесть сегмент : смещение. А раз уж зашел разговор про основы, то обьясните ув-е этот вопрос плиз. При незнании его я учил некоторые темы, но иногда сталкивался с небольшими пробелами.
Вообщем допустим я знаю, что адрес формируется примерно так: сегмент - 1234h смещение - 023h. К сегменту прибавляется 0, потому что начало сегмента должно быть на границе параграфа, тоесть кратным 10h.
12340h+00023h=12363h. Так вот интересует, допустим:
1) по идее у сегмента 12340h только 4 разряда свободны для смещения, т.е. - 0 в конце. А в эти 4 разряда ведь может влезть только значение от 0 до 16 смещения! А пишется что ещё и смещение имеет размер 64кб.
Тоесть к примеру адрес:сегмент - 12340h, прибавляем смещение- 12341h, 12342h ,12343h ... (тоесть смещение 1,2,3) ,1234fh . Так вот если допустим прибавить смещение 11h к сегменту 12340h, будет ведь уже адрес 12351h ! тоесть уже совсем другой сегмент! Как тогда в адресе 12340h вместо нуля влазит 64кб смещения.
2) И вообще как формируется адрес допустим в 16 битном регистре ip 12340h? ip увеличивается с каждой прочитанной командой на один,т.е. на размер команды. И как этот адрес влазит в 16 бит? За несколько обращений к памяти?
Сильно не пинайте. Обьясните ув-е. Ато постоянно крутится в голове этот вопрос! Есть желание огромное понять эту мелочь!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2010, 11:19
Ответы с готовыми решениями:

Особенности выделения памяти при интерпретации
Windows XP В среде Borland Delphi 7 отключена оптимизация при генерации кода. Создано консольное...

Особенности ТИЦ
Возник один вопрос. Взаимная ссылка на акцептор дает меньше, чем не взаимная? Т.е. если сайт...

особенности visual c++
какие особенности visual c++? мне для курсовой надо.

Terminal 1.9b by Br@y+ особенности.
Программа для общения по ком порту Terminal 1.9b by Br@y+ весьма популярна но есть интересная...

Особенности цикла FOR
<?php $str = 'Hello'; for($i=0,$k = strlen($str); $i<$k; $i++) { echo $str. ' '; } ?>

12
vital792
2007 / 1279 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
04.09.2010, 11:35 2
Цитата Сообщение от assemb Посмотреть сообщение
тоесть уже совсем другой сегмент!
Физический адрес состоит из 2 слов сегмент и смещение. и записать его можно различными способами - прибавить к сегментному 1 или к смещению 16 одно и то же как вам больше нравится.

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

Добавлено через 1 минуту
шина адреса была 20 разрядная а регистры 16. Поэтому сделали так - умнее ниче не придумали(да и не придумаешь особо тока использовать 2 регистра)

Добавлено через 42 секунды
че то у меня все дублируется)))
0
Goodwin98
2527 / 823 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
04.09.2010, 11:37 3
Цитата Сообщение от assemb Посмотреть сообщение
1) по идее у сегмента 12340h только 4 разряда свободны для смещения, т.е. - 0 в конце. А в эти 4 разряда ведь может влезть только значение от 0 до 16 смещения! А пишется что ещё и смещение имеет размер 64кб.
Тоесть к примеру адрес:сегмент - 12340h, прибавляем смещение- 12341h, 12342h ,12343h ... (тоесть смещение 1,2,3) ,1234fh . Так вот если допустим прибавить смещение 11h к сегменту 12340h, будет ведь уже адрес 12351h ! тоесть уже совсем другой сегмент! Как тогда в адресе 12340h вместо нуля влазит 64кб смещения.
Да, сегменты в реальном режиме перекрываются друг с другом.

Цитата Сообщение от assemb Посмотреть сообщение
2) И вообще как формируется адрес допустим в 16 битном регистре ip 12340h? ip увеличивается с каждой прочитанной командой на один,т.е. на размер команды. И как этот адрес влазит в 16 бит? За несколько обращений к памяти?
Сильно не пинайте. Обьясните ув-е. Ато постоянно крутится в голове этот вопрос! Есть желание огромное понять эту мелочь!
В ip храниться только смещение внутри сегмента кода, т.е. эти самые 64 кб. Физический аддрес формируется совсем не здесь.
0
vital792
2007 / 1279 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
04.09.2010, 11:41 4
Цитата Сообщение от assemb Посмотреть сообщение
И вообще как формируется адрес допустим в 16 битном регистре ip 12340h?
В данном случае адрес формируется в регистровой паре cs:ip
0
04.09.2010, 11:41
assemb
64 / 64 / 1
Регистрация: 14.04.2010
Сообщений: 170
04.09.2010, 13:36  [ТС] 5
Обычно до меня доходит сразу ув-е какая-то тема, если только не связано с низкоуровнёвым программированием! Но тут почему-то небольшая путанница у меня в этих понятиях! Считаю что один раз надо понять, а потом всё само будет липнуть! Тем более что это основа основ!
Тоесть я допустим знаю один высокоуровнёвый язык. Там допустим сильно так не застрявал на какой-то мелочи! Допустим при вызове какой-то фунуции(процедуры) func(x,y) для меня стало какбы аж небольшое открытие, что в действительности там происходит push x и push y .А я не обращал внимания на синтаксис вызова функции, не придавал значения, что происходит push x и push y.
Так вот проясните плиз ув-е на пальцах если можно образно говоря.
Физический адрес состоит из 2 слов сегмент и смещение. и записать его можно различными способами - прибавить к сегментному 1 или к смещению 16 одно и то же как вам больше нравится.
если допустим прибавить смещение 11h к сегменту 12340h, будет ведь уже адрес 12351h ! тоесть уже совсем другой сегмент!
Ну путанница у меня здесь! Прибавляем к 12340h смещение 16, получается 12350h ! Новый сегмент!
и это не будет другой сегмент
Почему не будет новый сегмент? Согласен, что чтото недопонял, но ведь пропустив и это, дальше будет ещё сложнее!
0
Goodwin98
2527 / 823 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
04.09.2010, 13:52 6
Я же говорю. Каждый сегмент перекрывает в физической памяти 15 других сегментов.
Т.е. вы можете обратиться к одному и тому же байту в физической памяти из 16 сегментов.

Сегмент 1234h смещение 0
Сегмент 1233h смещение 10h
Cегмент 1232h смещение 20h
...
все это указывает на один и тот же байт с физическим аддресом 12340h.
1
vital792
2007 / 1279 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
04.09.2010, 14:26 7
как было уже сказано сегменты могут перекрываться. Это следует из того что сегментные адреса следуют через 16 байт, а размер сегмента 64 кб. Следовательно надо не допускать чтобы сегменты одного кода перекрывались с другими, но это уже задача операционной системы(менеджера памяти). Из этого следует что программы в реальном режиме практически не защищены от вмешательства других, чем раньше активно пользовались многие личности. Для этого и был придуман защищенный режим.

Добавлено через 13 минут
В данном случае у тебя путаница произошла из-за того что сегментом называется часть физического адреса сегмент:смещение и область физической памяти заранее определенного размера, которая отводится под код, данные, стек. Не зацикливайся на этом, в дальнейшем процессе изучения поймешь разницу.

Добавлено через 11 секунд
В данном случае у тебя путаница произошла из-за того что сегментом называется часть физического адреса сегмент:смещение и область физической памяти заранее определенного размера, которая отводится под код, данные, стек. Не зацикливайся на этом, в дальнейшем процессе изучения поймешь разницу.

Добавлено через 3 минуты
Можно изменять и сегментную часть адреса и смещение, но приэтом не выходить из сегмента кода(или данных), поэтому я сказал сегмент не меняется. небольшая путаница в определениях
1
assemb
64 / 64 / 1
Регистрация: 14.04.2010
Сообщений: 170
04.09.2010, 14:34  [ТС] 8
Ништяк. Вроде начинает что-то вырисовываться картина образная связанная. Надо отойти. Вечером додумаю, постараюсь.
0
Orwomoi
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
04.09.2010, 16:00 9
Все рассказали об адресации в сегментной памяти. Но не сказали главного о самой сегментной модели - фигня. Это динозавр, который давно должен был умереть. Изучать динозавра - археология.

Дос и реальный режим давно в прошлом. Всё это бесполезные знания. Всё, что нужно знать из темы реального режима - как перейти в защищенный.
0
assemb
64 / 64 / 1
Регистрация: 14.04.2010
Сообщений: 170
04.09.2010, 20:47  [ТС] 10
Так вопрос был поставлен! По моему, дос и реальный режим как азбука! Ведь чтобы уметь читать, надо знать слова! Поправьте если ошибаюсь! Тоесть я не спорю, что могу ошибаться, потому что не знаю ещё защищённый режим! А этого динозавра сейчас в защищённом режиме нельзя? использовать. Приручить , или на шашлык(не пинать!)? образно!
0
vital792
2007 / 1279 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
04.09.2010, 21:55 11
Цитата Сообщение от assemb Посмотреть сообщение
потому что не знаю ещё защищённый режим!
думаю вам его знать и не надо. Зачем забивать себе голову всякими дескрипторами и шлюзами если толком не разобрались в адресации в режиме реальных адресов)). Имеется в виду что програмировать можно в защищенном режиме даже не зная о его существовании), т.е. на прикладном уровне. Другими словами писать под винду, используя апи, или под линукс используя системные вызовы через libs или 80h. Но я думаю все таки узнавать основы ассемблера лучше в досе или вообще без ос. Там чуть ли не руками можно потрогать все оборудование, а низкоуровневые языки как раз для того и есть чтобы максимально приблизиться к железу.
0
Orwomoi
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
04.09.2010, 23:51 12
Цитата Сообщение от assemb Посмотреть сообщение
По моему, дос и реальный режим как азбука!
Нее... Азбука - это основа на которой сроится весь русский язык. А сегментная модель памяти это апендикс - когда-то он был нужен, но сейчас это бесполезный отросток. Между прочим, даже в начале 80х сегментная модель уже устарела. Кажется, Моторола в то время вводила плоскую модель. Только в Интеле нашлись глупые люди, которые сделали сегментацию на 8086, и программисты всего мира долгое время страдали от этого.

P.S. Защищеный режим != высокоуровневый. Без ОСи или в драйвераз в защищенном режиме можно трогать железо. Реальный режим сохраняется только ради некому ненужной совместимости с 8086. Лучше софтварно эмулировать, чем сохранять костыли.
0
assemb
64 / 64 / 1
Регистрация: 14.04.2010
Сообщений: 170
05.09.2010, 11:18  [ТС] 13
Как это -
Защищеный режим != высокоуровневый. Без ОСи или в драйвераз в защищенном режиме можно трогать железо. Реальный режим сохраняется только ради некому ненужной совместимости с 8086. Лучше софтварно эмулировать, чем сохранять костыли.
т.е. Защищеный режим не равен высокоуровневый.? По идее высококий уровень прогера в защищённом!
Честно? Ничего не понял из этого предложения! Не в обиду! как начинающий уровень низко- высокопрограммёрства , мне не с чем сравнивать, но азбуку немного знаю!
Тоесть мы отвлеклись от сути! Желательно вставлять реальные доводы про реальный режим и защищённый!
Не могу судить сейчас про - реальный и защищённый режим. "Мы отвлеклись" . Я ничего не возобнил из себя, может кто так подумал! (тем более, что я сейчас вникаю в основы)

Добавлено через 10 часов 48 минут
Защищеный режим != высокоуровневый. Без ОСи или в драйвераз в защищенном режиме можно трогать железо. Реальный режим сохраняется только ради некому ненужной совместимости с 8086. Лучше софтварно эмулировать, чем сохранять костыли.
Понял.
програмировать можно в защищенном режиме даже не зная о его существовании
0
05.09.2010, 11:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2010, 11:18

Особенности radioбатона
Как в зависимости от размера и типа шрифта надписи RadioButton менять программно размер...

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

Особенности вызова
Доброго времени суток! Возник вопрос по поводу вызовов статического метода класса class Test { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.