UAC
833 постов
Карма: 27
#1 04 января 2009 в 13:01
Нужен отладчик DOS-программ (16 бит) для Vista 32бита. <br />Просто, td.exe у меня пару раз crashed и это напрягает... <br /><br />Нужно тестировать код на ассемблере, будь он неладен&nbsp; ;D <br />Главное, что навело меня на мысль о НЕсовместимости: <br />- программа рушится на совершенно &quot;безобидном&quot; участке кода, а Vista пишет: <br /><br /><br />- EventData <br /><br />&nbsp; &nbsp;16 bit MS-DOS Subsystem <br />&nbsp; &nbsp;C:\Windows\system32\cmd.exe The NTVDM CPU has encountered an illegal instruction. CS:94e8 IP:0e5e OP:63 72 6f 73 6f Choose &#39;Close&#39; to terminate the application. <br />...и приблизительно такое же пишет когда я пытаюсь прогнать программу до нужного мне места (клавиша F4)<br /><br />П.С.: попробую гонять это чудо под DOSBOX. <br />П.П.С.: забавно... отладчик TD.EXE запустился под DOSBOX, но изменения в памяти не показывает, а когда я установил курсор на предпоследней строке и нажал F4 (выполнить до указанного места) DOSBOX намертво завис... Вот так...
Берсеркер
2318 постов
Карма: 216
#2 05 января 2009 в 19:13
Что за прога?<br /><br />Не хочешь поставить виртуальную машину?<br />Ставишь туда какую угодно Ось, лишь бы отладчик запустился. И отлаживаешь скока угодно&nbsp; ;)<br />
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
Берсеркер
2318 постов
Карма: 216
#3 05 января 2009 в 19:14
И что за &quot;безобидный участок кода&quot;?
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#4 05 января 2009 в 20:25
Берсеркер<br />Vm player стоит, но я толком не умею им пользоваться. <br />А код такой: <br /><br />;Одна из домашек - найти и записать в массив все простые числа до 255<br />;save inside array called PRIMES all the prime numbers that can be contained in BYTE<br />;2, 3, 5, 7, 11, 13, 17, 19, 23, 29 and so on...<br />dannie segment<br /> PRIMES db 64h dup(?) ;размер массива определил &quot;на глаз&quot;<br />dannie ends<br />vasya segment<br /> assume cs:vasya, ds:dannie<br />begin:<br /> mov ax, dannie<br /> mov ds, ax<br />;---------------------------------<br /> mov bx, 0 <br /> mov dh, 2<br />cycle1: <br /> mov dl, 2<br /> cmp dh, dl<br /> je save<br />cycle2:<br /> sub ax, ax<br /> mov al, dh<br /> div dl<br /> cmp ah, 0<br /> je notprime<br /> inc dl <br /> cmp dl, dh <br /> jb cycle2<br />save:<br /> mov PRIMES[bx], dh<br /> inc bx <br />notprime:<br /> inc dh <br /> cmp dh, 0ffh<br /> jbe cycle1 ; возможно, лажа происходит здесь: в конце: dh == 255? да, ещё один прогон dh++, dh == 0... вроде, бесконечного цикла... <br />;---------------------------------<br /> mov ah, 4ch<br /> int 21h<br />vasya ends<br />end begin<br />Кстати, я заметил, что вылеты происходят не в одном конкретном месте... картина усложняется
Берсеркер
2318 постов
Карма: 216
#5 06 января 2009 в 05:34
Ну понятное дело, массив PRIMES у тебя лежит до кода, и если прога зацикливается, BX нарастает и залезает на код.<br />Происходит порча код, имеем ошибку при выполнении хз какой инструкции&nbsp; &nbsp;:D<br />Сделай так:<br />1. перенеси PRIMES в конец кода, уж если и вылезет за пределы, то код не убъёт. Но это параноидальная мера, в принципе не нужная, если сделаешь п.2<br />2. Если размер PRIMES равен 64, при инкременте BX проверяй, если он = 64, то завершай работу.<br />PS: код легче читается если ставить пробелы, например не incdh , а inc dh&nbsp; ;)&nbsp; (похоже форум TAB хавает&nbsp; :( )<br />И вот что я еще заметил:<br />cmp dh, 0ffh<br />jbe cycle1;&nbsp; этот переход не выполнится никогда, т.к. простое число до 255 еще запомнится, а простое большее чем 255 - тоже не найдем, т.к. перейдет циклический переход с 255 на 0.
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
Берсеркер
2318 постов
Карма: 216
#6 06 января 2009 в 06:15
Короче, код не красив в плане контроля выхода за пределы массива.<br />Сделай выход из цикла при переполнении массива ИЛИ получения простого числа больше 255, для этого используй 16-битный регистр.
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#7 06 января 2009 в 08:03
Берсеркер<br />Какой браузер юзаешь? У меня всё нормально отображается в плане пробелов и табуляции. (таб выглядит как пробел)<br /><br />Я просто сделаю вместо: <br />
И вот что я еще заметил:<br />cmp dh, 0ffh<br />jbe cycle1;&nbsp; этот переход не выполнится никогда
<br />cmp dh, 0ffh<br />jb cycle1<br />...потому как 255 не является простым и не буду мозги парить умным людям&nbsp; ;) <br />Тестировать наверное не буду, потому как всплыла новая, гораздо более серъёзная задача. <br /><br />Кстати, не знаешь нормального дэбаггера DOS-программ для Vista 32 бита? <br />ОллиДэбаг не работает с 16 битными прогами, SOftICE тоже, я пробовал несколько версий - не дружит с Вислой. <br />Также, пробовал несколько разных версий Turbo Debugger&#39;а и они тоже как-то не совсем удачно возвращают управление cmd. <br /><br />Возможно самый совместимый это встроенный в ОС debug, но я им пользоватся не умею, довольно жуткая программа...
Берсеркер
2318 постов
Карма: 216
#8 06 января 2009 в 11:45
юзаю в данный момент IE<br /><br />
этот переход не выполнится никогда
<br />- это я опечатался, правильно будет &quot;не выйдет из цикла&quot;&nbsp; :-[<br /><br />
cmp dh, 0ffh<br />jb cycle1
<br />Тут тоже бессмыслица, потому как в DH больше чем 0ffh не загнать!<br />
Тестировать наверное не буду, потому как всплыла новая, гораздо более серъёзная задача.
<br />Вопрос закрыт?<br /><br />Под Вислу не знаю софта&nbsp; :( я на XP64 сижу.<br />Из молодости вспоминается отладчик TIC (в девичестве AFD), легче чем TD. Но это тоже 16-битная прога, тоже наверняка будет некорректно выходить в cmd. Этим страдают многие 16-битные проги, запущенные в XP (и Vista?)<br /><br />
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#9 06 января 2009 в 12:57
Берсеркер<br />
юзаю в данный момент IE
<br />У меня же - Мozilla Firefox 3.0.5 <br />
- это я опечатался, правильно будет &quot;не выйдет из цикла&quot;
<br />Не имеет значения - я тебя правильно понял. <br />
Цитировать<br />cmp dh, 0ffh<br />jb cycle1<br />Тут тоже бессмыслица, потому как в DH больше чем 0ffh не загнать!
<br />Ага, но когда там будет ff условие cmp dh, 0ffh а потом jb cycle1 не сработает (вернее сработает NOP где-то в глубинах процессора), и прыжка не будет. Mission accomplished. <br />
Вопрос закрыт?
<br />Я всё-таки ещё потестирую, но думаю больше сложностей в этом примере не возникнет. <br />Всё равно препод потом скажет как этот код укоротить раза в два&nbsp; ;D <br />
Из молодости вспоминается отладчик TIC
<br />Интересно... поищу, попробую. <br /><br />Спасибо&nbsp; :)<br /><br />П.С.: рано я расслабился - теперь вылетает на первой же строке кода: <br /><br /><br />П.П.С.: turbo debugger я &quot;сдал в утиль&quot; и теперь пользуюсь более достойным и более мобильным (бесплатный проэкт) INSIGHT версии 123. Даже клавиши как в td. Ещё я поюзал немного AFD pro, но он мне понравился меньше. <br /><br />Плюсы INSIGHT: расположение клавиш (функций) отладчика как в td, не требует для запуска доп. модулей как например td, почти исправно возвращается в cmd (&quot;забывает&quot; очистить экран, делаем вручную cls - и порядок). Минус - в окне отладчика не работает мышка. Всем реккомендую. <br /><br />http://www.bttr-software.de/products/insight/<br />Судя по именам, большая часть разработчиков - выходцы СНГ.
Берсеркер
2318 постов
Карма: 216
#10 06 января 2009 в 15:31
Ух ёпс (сказал я глядя на скрин).<br />Прога еще не начала выполняться, а уже крэш.<br />В проге код: B8 BB 17<br />А в крэш-отчете: FF FF 00 FF FF - явно левый код.<br />Похоже на обычный глюк старой 16-битной проги в среде XP/Vista.<br />TD фтопку!<br /><br />INSIGHT - надодь поглядеть&nbsp; ::) сенкс.<br />
Судя по именам, большая часть разработчиков - выходцы СНГ.
<br />Ну дык полна земля славянская талантами&nbsp; ;)
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.