![]() |
|
|
![]()
|
|
| котъ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 29.9.2004 Репутация: нет Всего: нет |
как в общем виде решить такую вот задачу :
с микроконтроллера в комп поступают байты данных, но их количество превышает 64к !!!!!!!! В одном сегменте данных программы .com и . exe они не могут разместиться !! Как же их разместить и куда ??? Решаема ли эта задача для реального режима с применением дополнительной памяти в пределах мегабайта ? А если байтов больше чем 1мб ? -- только защищенный режим с применением расширенной памяти ? В какие сегменты в этом случае писать получаемые байты ? СПАСИБО !!!!!! |
|||
|
||||
| Akina |
|
||||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Используй нормализацию указателей:
DOS-GW extender -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Ну вообще-то проще всего сохранять данные на диск ;)
С трудом представляю себе задачу когда нужно держать ВСЕ данные обязательно в памяти. В общем случае действительно можно использовать обычную память до 1 Мегабайта или функции DPMI. Это (DPMI) несложно, и поддерживается всеми версиями windows, а в случае чистого доса устанавливается простой драйвер (досовский). -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Janus |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
А если нужно работать под чистым досом без дополнительных дров?
Что если не использовать файлы? Нужно в память помещать много данных, непрерывно. Как это сделать? Есть что-то вроде этого:
Так вот, программа получается огромной - 2 дополнительных сегмента, каждый по 64 Кб. Как сделать, чтобы можно было написать так:
Но чтобы можно было спокойно использовать по 64 Кб каждого сегмента. Естественно, в начале работы нужно как-то заполнить сегменты значениями(см. код выше). --------------------
Проект "Репликатор" |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
с приведенным выше кодом нормализации я спокойно под ДОСом работал с массивом 200-300 кб.
Вернее с двумя массивами - 2 устройства синхроно получали данные, их надо было синхронно обрабатывать, но вот передача могда идти несинхронно - вплоть до того что второй массив мог пойти вообще после первого... получать в память была не моя забота, но массивы были от 100 до 160 кб... и их надо было накапливать... я выделял 2 MCB по 160 кб каждый, а обрабатывались они с нормализацией, потому сегнментация не мешала. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Ну по поводу "удобной работы без сегментофф" есть много всякого - в том числе "нереальный" режим процессора (по книге Зубкова С.В.):
А вообще-то переключить проц в PM и работать с большими кусками памяти - совсем не сложно -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| котъ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 29.9.2004 Репутация: нет Всего: нет |
Всем огромное спасибо !!!!
Только я пока имею разряд чайника , но попробую разобраться. Объястите пожалуйста только вот что : а ваще сколько может быть всего сегентов данных по 64к в . exe программе для доса???? - в пределах дополнительной памяти ? а в пределах расширенной? Как их определить - задать в программе??!!!!!!!!!!!!!!!!!!!!! Если не трудно то лучше показать на коротком примере. Или в этом качестве используется дополнительный сегмент es или сегменты? Относительно диска , я понял так , что в процессе набора из МК в комп можно набирать данные по 64к и скидывать последовательно в .dat файлы на диск !????? А затем уж их обрабатывать по отдельности . А что если эти файлы потом слить в один .dat ? и обрабатывать как один общий? И обрабатывать его частями по 64к? |
|||
|
||||
| Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
А можно в двух словах самую суть? Чего мы этим добились? Или ссылку на статью. --------------------
Проект "Репликатор" |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Можно. У файла как правило нет ограничений на размер. Открой его и пиши в него сколько хочешь сессий с данными. Или на каждую сессию свой файл. Имхо, тебе не нужно много памяти. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Да собственно это просто реализация механизма модели памяти huge. На АСМе. Не более и не менее. Исключение заворота сегмента... статьи, извини, нет. не писАл... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| котъ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 29.9.2004 Репутация: нет Всего: нет |
Уважаемый Chingachguk!
попробовал писать в .dat файлы по мере заполнения массива сегмента данных. Все получается ! Действительно можно обрабатывать неограниченные объемы ! Только если тебе не очень трудно , ответь пожалуйста на старые вопросы !!!! а именно : Объясни пожалуйста только вот что : а ваще сколько может быть всего сегентов данных по 64к в . exe программе для доса???? - в пределах дополнительной памяти ? а в пределах расширенной? Как их определить - задать в программе??!!!!!!!!!!!!!!!!!!!!! Если не трудно то лучше показать на коротком примере.!!!!!!!!!!!!!!!!!!! Или в этом качестве используется дополнительный сегмент es или сегменты? Извини за возможно глупые вопросы , но в литературе о них " забывают" писать. СПАСИБО! |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
а не про ще ли сделать FLAT режим (ну это когда предел сегмента в 4 гб в реальном режиме) ?
p.s. вот кстати на сайте FASM
http://flatassembler.net/examples.php -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Chingachguk |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Сделай команду mem /d /p. Увидишь примерно сколько у тебя памяти может быть. Около 550 000 байт. Число сегментофф ~ 550 000 / 2^16.
Ну если под расширенной понимать то, что после видеопамяти и до (за)BIOS'а (ом) в самых старших адресах, то еще парочка, а если ты про память за 1-м мегом (которая доступна через DPMI), то не менее 16 мегабайт / на размер сегмента.
Какой программе ? com/exe на асме ? Для com сразу выделяется вся память за программой до видеопамяти, можешь сразу отступить от своего начала 64 Килобайта и делать с ней что хочешь. Для EXE зависит от линковки, но можно просто определить несколько сегментов .DATA?, тебе будут доступный они после загрузки.
Это сообщение отредактировал(а) Chingachguk - 6.12.2005, 15:56 -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||||||
|
|||||||||
| котъ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 29.9.2004 Репутация: нет Всего: нет |
спасибо Chingachguk !
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |