![]() |
|
![]() ![]() ![]() |
|
aeroslav |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Может предание старо как мир, но никак я эту проблему решить не могу. Накропал файлик Lab3.asm. На его основе сделал Lab3.obj тем же Тасмом, что идет в идет в Паскале. Написал Labor3.pas. Подключил к нему Lab3.asm. Все это бесценное творение лежит в папке BIN. При запуске программа, доходит до выполнения asm-процедур вылетает ошибка :"Error 200: Division by zero". Ошибка сия вылетает и тогда, когда я убираю из процедур все операции деления (дабы просто провериться). Ежели запустить скомпилированный exe-шник то в ходе выполнения проги выдается ошибка (привожу полностью):
16-разрядная подсистема MS-DOS C:\BP\BIN\LABOR3.EXE Процессор NTVDM обнаружил недопустимую инструкцию. CS:0002 IP:0057 OP:f0 37 05 0e 02 Для завершения работы приложения нажмите кнопку "Закрыть". Работаю в Windows XP. А вот и тексты прог.
Помогите пожалуйста! Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Известный сбой модуля CRT.TPU на быстрых процессорах - при определении скорости системы получается деление на ноль. Характерен как для Паскалей версий по 7.0 включительно, так и для Клипперов версий по 5.0 включительно.
Ищи патченый CRT.TPU. Или патчер для линкованных программ. Или просто поправь исходник модуля, в счетчике циклов в обработчике прерывания таймера добавь увеличение счетчика перед делением и пересобери модуль. По-иному проблема не решается. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Асм тут совсем не при чём.
Стандартная трабла модуля Crt - не писался он под современные процы. Лови фиксер и новый Crt.pas Присоединённый файл ( Кол-во скачиваний: 47 ) ![]() |
|||
|
||||
aeroslav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Народ, спасибо, попробую сейчас. Надеюсь, что заработает.
|
|||
|
||||
aeroslav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Наткнулся попутно на такую статью:
В связи с кривизной модуля CRT на быстрых машинах типа iPentium II/III, iCeleron программы откомпиленные на BP7/TP7 при запуске вылетают с run-time error 200 - деление на ноль. Причём ошибка эта появляется при подключение модуля даже если вы и не вызывали процедуру Delay, которая там криво написана. Суть проблемы состоит в том, что в этом модуле время измерялась через производительность процессора - в то давнее древнее время, как сами понимаете, не было столь быстрых процессоров и не было этой ошибки. Для того, чтобы ваши программы не вылетали вам нужно установить пропатченный вариант CRT, который Вы сможете скачать с сайта Библиотека программиста - http://prog.agava.ru. При этом учтите, стандартный модуль crt.tpu находится в turbo.tpl, чтобы включить в него полученный вами модуль надо найти в поставке Борланд Паскаль tpumover и сделать нижеследующее: <полный_путь>\tpumover.exe turbo.tpl +crt.tpu Кстати, для очень быстрых машин это может и не помочь. Я все это сделал, но ошибка не пропала. Это может быть из-за того, что у меня Athlon 3000+? |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Нет под рукой щас паскаля.
Пропатчить не могу. Но совет простой - не используй Crt ![]() |
|||
|
||||
aeroslav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Да у меня уже есть CRT.TPU пропатченный, я его с нета скачал, добавил в turbo.tpl как описано выше(но не уверен, ибо никаких сообщений типа Окей или Гуд линкинг не появилось). Завтра попробую, если не выйдет ничего, поставить на VMWare 98-й или 95-й, и там уже дальше буду ковыряться. А по поводу совета, как я без CRT ввод/вывод без заморочек сделаю? |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
||||
|
||||
aeroslav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
||||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Ну так как раз наоборот - то что нужно.
В Crt тебе уже готовые функции на асме написаны. Перенеси к себе и юзай ![]() |
|||
|
||||
aeroslav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Годится, главное, что указали, куда рыть дальше. Можно считать, что проблема решена. Спасибо.
|
|||
|
||||
aeroslav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Какая-то заговоренная ошибка. Я уже пробовал и с патчем и без, и в эмулятре, и нашёл пенёк 133 с 98й виндой, и везде это долбаное деление на ноль ![]() З.Ы. Или может кто-то стыковал с Delphi7? Напишите плиз, если кто знает, мне и такой вариант подойдет. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |