| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как откопилировать 16-bit'ную программу на C? |
| Автор: Modder 7.1.2010, 23:31 |
| Как откопилировать 16-bit'ную программу на C в Borland 5.02 или Microsoft Visual Studio 2005? |
| Автор: andrew_121 7.1.2010, 23:45 |
| это зависит. код покажи. |
| Автор: Modder 8.1.2010, 01:14 | ||
Вот одна из программ:
|
| Автор: andrew_121 8.1.2010, 01:50 |
| http://rghost.ru/803567 но в вендовзе она работать не будет. |
| Автор: Modder 8.1.2010, 02:16 | ||
| Качал уже кучу таких программок, но все равно не вышло. Нашел способ с помощью Borland через командную строку
И еще вопрос, можно ли такого рода программку без заморочек перевести на 32-bit? |
| Автор: Modder 8.1.2010, 03:16 | ||
Т.е. откомпилировать виндузным компилятором (тем же Borland 5), пользуясь виндузным его интерфесом (не командной строкой как я предложил выше), а не досовским компилятором (типа Turbo C).
Я не это имел ввиду. Как исходный код переписать под 32-bit? Много переписывать? В чем отличия в коде? Почему 32-битным не компилируется? Я просто с этим не особо знаком. |
| Автор: andrew_121 8.1.2010, 03:46 |
я бы не назвал его вендозавским компилятором. это что-то между ms-dos и win-3.1 для начала нужен 32-ух битный компилятор. далее. в вашем коде используется доступ к регистрам процессора, и вызов прерываний ms-dos. если с первым еще можно справится, то последнее не возможно. одним словом, эта программа для ms-dos. да и зачем она вам? судя по (reg.x.ax = 0x440d), программа что-то выполняет с диском. в венде такое не прокатит. для начала, нужно понять что именно программа выполняет. потому что, этот код остался в прошлом, лет эдак 15-20 назад. |
| Автор: Modder 8.1.2010, 15:03 | ||
Хорошо. Смысл всего понял. И тогда еще один вопрос:
Почему в 32-bit невозможно реализовать вызов прерываний ms-dos? |
| Автор: xvr 8.1.2010, 19:34 | ||
Потому что его (MS-DOS) там (в Win32) нет. MS-DOS'овские программы под Win32 запускаются в специальном эмуляторе, который перехватывает все вызовы MS-DOS (и вообще все команды int) и перенаправляет их в соотвествующие драйвера поддержки. |
| Автор: andrew_121 8.1.2010, 19:41 |
и это(0x440d) виндовз не позволит выполнить. |
| Автор: kogemrka 8.1.2010, 20:00 |
| На самом деле прерывания в 32-битном режиме есть, но винда не позволит их вызвать. Дело в том, что в этом режиме (он называется защищённом) код исполняется в разных т.н.з. "кольцах защиты". Ядро операционной системы и драйверы работают в нулевом кольце - они могут обращаться к оборудованию напрямую и использовать прерывания. Прикладное ПО работает (как правило) в третьем кольце и может обращаться к "железу" только через абстракции (вызов функций ядра, например). Чтобы портировать этот код вам нужно найти в справочнике прерываний, для чего предназначены вызовы, используемые в программах и заменить на вызов функций API, выполняющих ту же работу. "без заморочек" сделать это не получится |
| Автор: mes 9.1.2010, 03:51 |
| можно еще пойти с другой стороны и вместо переделки поискать готовый виндоыный аналог вашей программы.. Если она выполняла что то полезное, что и щас может пригодиться, то вроятность находки велика. Добавлено через 12 минут и 45 секунд интересно на каком диске Вы собираетесь применять сию защиту.. Уж не на жеском ли ? или неужто до сих пор существуют (в смысле используются) магнитные диски ?! |
| Автор: Modder 9.1.2010, 12:08 | ||
mes, данная программа выполняет чтение 81-ой дорожки дискеты, считывает от туда счетчик количества запусков или установок какого-то ПО. Если счетчик не нулевой, то все хорошо и он уменьшается на 1. Типа ограниченное кол-во запусков)) Но под виндой она не работает, не выполняет операции чтения/записи:( В dos'е все ок.
Как оказалось, используюстся:( Но только в образовательных целях) |