|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 3, 2004 13:52:28 Необходимо с помощью ассемблерной вставки (или отдельной асм. подпрограммы) переслать блок памяти из одного места в другое. В программе на С++ я выделяю некоторый блок памяти и передаю указатели (сегменты и смещения) в асм. подпрограмму. Всё хорошо работает, если блок памяти умещается в пределах сегмента (передаётся менее 64К). А как быть если размер блока более 64К, как определить номер следующего сегмента для данного блока, или память выделяется только непрерывным блоком (номера сегментов идут по порядку)??? Все эти вопросы касаются программирования под ДОС в Large модели. |
|
|
Дата: Июл 3, 2004 22:48:27 Может быть, тебе поможет информация, что [сегмент:адрес+10h] и [сегмент+1:адрес] указывают на одно и то же место. |
|
|
Дата: Июл 4, 2004 02:50:46 Спасибо, но дело не в том, что один и тот-же адрес можно адресовать различными комбинациями сегмент:смещение, а в следующем, на С++: char * buffer = new char[80000]; AsmFunck(buffer); // некая ф-ия на асме на асме: AsmFunck PROC C FAR USES es di, myptr:dword les di, myptr ..... rep movsd ; пересылаем нечто Как при этом, по достижении конца сегмента, определить где данные продолжаются. Как я понял, что Борландовские что Майкрасовские компиляторы используют свои DPMI сервера. Как из асмы можно получить инфу о выделенном в С++ модуле блоке памяти? Даже не знаю куда копать :( ??? |
|
|
Дата: Июл 4, 2004 15:10:33 А попробуй посмотреть ассемблерный листинг своей программы на Си (не знаю, как у мелкомягких, а в турбо-си и в gcc - опция -S). |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.181 |