|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 10, 2003 14:49:29 Подскажите, плиз, как создать на ТАСМе СОМ файл который содержалбы код под 16 бит и рядом код под 32 бит, вообще возможно ли такое прямым способом или тока создать ЕХЕ файл с 2-я сегментами и затем из него "выдрать" эти сегменты ? |
|
|
Дата: Окт 10, 2003 16:33:41group _code code16,code32 assume cs:_code segment code16 use16 org 256 start: ends code16 segment code32 use32 ends code32 PS: Уж не ОС ли ты пишешь? |
|
|
Дата: Окт 10, 2003 16:42:50 ТОЧНО!!! :-) Предмет у нас называется Анализ и Моделирование Операционных Систем, вот по нему у нас лабы ... А с сегментом данных аналогично? Мне еще надобы рядом с сегментом code16 расположить сегмент с данными data16, а потом за code32 расместить data32 ... (не обязательно, но мне почемуто так хочется ... :-)) или поправь меня. В общем этот файл должен будет загружаться боотсектором ..., т.е. это микроядрышко. P.S. Сенкс!!!. |
|
|
Дата: Окт 10, 2003 17:17:49 · Поправил: Black_mirror lazari Просто включаешь все сегменты в одну группу и все. Общие данные для обычного и защищенного режима помещай в 16-битный сегмент. Тогда к нему и из 16-и, и из 32-битного кода можно будет без проблем обращатся. А иначе tasm тебя замучает сообщениями что пытаешься в 16-битный регистр 32-битное смещение заслать. PS: Завидую я вам. У нас лабы по АрхОС были жутко отстойныли. Писали те же программы что и в двух других курсах: пищание спикером, вывод на принтер, чтение финта и т.д. И все прод ДОС. Как напишешь кинь мне на мыло, заценить. |
|
|
Дата: Окт 10, 2003 17:46:40 Ясненько, ща буду пробовать ... А ТАСМ меня уже замучал, почти неделю ни как не могу с ним договориться на счет этих адресов :-( PS: Я тебя понимаю, у нас до сих пор (первые 3 курса) тоже отстойные условия задач были (задачки в 3 строчки :-)). Вот тока на 4-ом стало интереснее ... А на счет кинуть на мыло - без базара, как тока будет чето рабочее - скину, ща пока тока бут сектор сделал, а терь за следующую ступень взялся ... |
|
|
Дата: Окт 12, 2003 15:40:42 Выручайте снова, плиз, терь вот какая трабла: сделал я СОМ файл по схеме аналогичной той из поста Black_mirror: group _code ... ends _code все точно как хотел, между секциями кода 16х и 32х есть еще секция данных 16х, и секция данных 32х после сода 32х. С бута этот COM грузится по адресу 1000h:0100h т.е. 10100h в защищенном режиме, но все offset-ы ТАСМ выщитывает как для СОМ файла (0000h-FFFFh) а мне ведь надо считать для защищенного режима, т.е. 10000h-1XXXXh вот реальный пример (вывод строки на экран, DS & ES инициализированы соответственно): mov esi,offset m_init_pm+KERNELIMAGE mov edi,0160 mov ecx,l_init_pm rep movsb KERNELIMAGE у меня равно 10000h. Вот вопрос: как обьяснить ТАСМу как правильно считать смещение в данном случае или мне так и придется все делать ручками ... :-( |
|
|
Дата: Окт 12, 2003 16:25:13 lazari В GDT объяви два дескириптора: дескриптор кода и дескриптор данных с базой 10000h и лимитом 64K. Тогда никакие смещения пересчитывать не придется. Для доступа ко всей памяти объявляешь дескриптор с базой 0 и лимитом 4Gb. Но если ты хочешь использовать flat модель то просто загрузи этот com-файл по адресу 100h. Главное только прерывания БИОСа не вызывать. Или в файле сделать дыру для его данных, чтобы он чего-нибудь другого не испортил. |
|
|
Дата: Окт 12, 2003 17:53:45 lazari Может лучше использовать fasm? У меня получилось сделать так чтобы в 32х-битном коде правильно вычислялось смещение. Также получилось сделать сегмент с общими данными. При доступе к которому из 16-битного кода смещение считается относительно начала сегмента, а при доступе из 32-битного относительно начала памяти. Правда в этом сегменте не получится сделать переменную типа var2 dd offset var1. Пример прилагается. _243481746__pm.zip |
|
|
Дата: Окт 12, 2003 18:22:47 Да, вариант со вторым дескриптором данных, мно понравился, довольно оригинально и просто. Думаю я на нем и останавлюсь, если все будет работать. А вот что делать с вызовом процедур? Аналогичный трюк? Не знаю что из этого выйдет, видимо еще долго придется биться головой об препятствия ... Я использую ТИНИ модель памяти, мне этого должно хватить. А переходить на другой ассемблер думаю нет смысла, т.к. это еще всеголишь лабораторная работа, а не серьезный проект и нету времени осваивать его, я пока что имею небольшой опыт работы тока с ТАСМ и МАСМ32. |
|
|
Дата: Окт 12, 2003 19:15:53 lazari Препятсвия будут только при переходе в защищенный режим и обратно. jmp придется делать руками. Ну и еще будут препятствия если ты вдруг захочешь одни и те же процедуры вызывать в реальном и в защищенном режиме. Хотя можно весь код сделать 16-битным. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061 |