#1
04 января 2009 в 13:01
Нужен отладчик DOS-программ (16 бит) для Vista 32бита. <br />Просто, td.exe у меня пару раз crashed и это напрягает... <br /><br />Нужно тестировать код на ассемблере, будь он неладен ;D <br />Главное, что навело меня на мысль о НЕсовместимости: <br />- программа рушится на совершенно "безобидном" участке кода, а Vista пишет: <br />
<br /><br />- EventData <br /><br /> 16 bit MS-DOS Subsystem <br /> C:\Windows\system32\cmd.exe The NTVDM CPU has encountered an illegal instruction. CS:94e8 IP:0e5e OP:63 72 6f 73 6f Choose 'Close' to terminate the application.
<br />...и приблизительно такое же пишет когда я пытаюсь прогнать программу до нужного мне места (клавиша F4)<br /><br />П.С.: попробую гонять это чудо под DOSBOX. <br />П.П.С.: забавно... отладчик TD.EXE запустился под DOSBOX, но изменения в памяти не показывает, а когда я установил курсор на предпоследней строке и нажал F4 (выполнить до указанного места) DOSBOX намертво завис... Вот так...
#2
05 января 2009 в 19:13
Что за прога?<br /><br />Не хочешь поставить виртуальную машину?<br />Ставишь туда какую угодно Ось, лишь бы отладчик запустился. И отлаживаешь скока угодно ;)<br />
#3
05 января 2009 в 19:14
И что за "безобидный участок кода"?
#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(?) ;размер массива определил "на глаз"<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 />Кстати, я заметил, что вылеты происходят не в одном конкретном месте... картина усложняется
#5
06 января 2009 в 05:34
Ну понятное дело, массив PRIMES у тебя лежит до кода, и если прога зацикливается, BX нарастает и залезает на код.<br />Происходит порча код, имеем ошибку при выполнении хз какой инструкции :D<br />Сделай так:<br />1. перенеси PRIMES в конец кода, уж если и вылезет за пределы, то код не убъёт. Но это параноидальная мера, в принципе не нужная, если сделаешь п.2<br />2. Если размер PRIMES равен 64, при инкременте BX проверяй, если он = 64, то завершай работу.<br />PS: код легче читается если ставить пробелы, например не incdh , а inc dh ;) (похоже форум TAB хавает :( )<br />И вот что я еще заметил:<br />cmp dh, 0ffh<br />jbe cycle1; этот переход не выполнится никогда, т.к. простое число до 255 еще запомнится, а простое большее чем 255 - тоже не найдем, т.к. перейдет циклический переход с 255 на 0.
#6
06 января 2009 в 06:15
Короче, код не красив в плане контроля выхода за пределы массива.<br />Сделай выход из цикла при переполнении массива ИЛИ получения простого числа больше 255, для этого используй 16-битный регистр.
#7
06 января 2009 в 08:03
Берсеркер<br />Какой браузер юзаешь? У меня всё нормально отображается в плане пробелов и табуляции. (таб выглядит как пробел)<br /><br />Я просто сделаю вместо: <br />
И вот что я еще заметил:<br />cmp dh, 0ffh<br />jbe cycle1; этот переход не выполнится никогда<br />cmp dh, 0ffh<br />jb cycle1<br />...потому как 255 не является простым и не буду мозги парить умным людям ;) <br />Тестировать наверное не буду, потому как всплыла новая, гораздо более серъёзная задача. <br /><br />Кстати, не знаешь нормального дэбаггера DOS-программ для Vista 32 бита? <br />ОллиДэбаг не работает с 16 битными прогами, SOftICE тоже, я пробовал несколько версий - не дружит с Вислой. <br />Также, пробовал несколько разных версий Turbo Debugger'а и они тоже как-то не совсем удачно возвращают управление cmd. <br /><br />Возможно самый совместимый это встроенный в ОС debug, но я им пользоватся не умею, довольно жуткая программа...
#8
06 января 2009 в 11:45
юзаю в данный момент IE<br /><br />
этот переход не выполнится никогда<br />- это я опечатался, правильно будет "не выйдет из цикла" :-[<br /><br />
cmp dh, 0ffh<br />jb cycle1<br />Тут тоже бессмыслица, потому как в DH больше чем 0ffh не загнать!<br />
Тестировать наверное не буду, потому как всплыла новая, гораздо более серъёзная задача.<br />Вопрос закрыт?<br /><br />Под Вислу не знаю софта :( я на XP64 сижу.<br />Из молодости вспоминается отладчик TIC (в девичестве AFD), легче чем TD. Но это тоже 16-битная прога, тоже наверняка будет некорректно выходить в cmd. Этим страдают многие 16-битные проги, запущенные в XP (и Vista?)<br /><br />
#9
06 января 2009 в 12:57
Берсеркер<br />
юзаю в данный момент IE<br />У меня же - Мozilla Firefox 3.0.5 <br />
- это я опечатался, правильно будет "не выйдет из цикла"<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 />Всё равно препод потом скажет как этот код укоротить раза в два ;D <br />
Из молодости вспоминается отладчик TIC<br />Интересно... поищу, попробую. <br /><br />Спасибо :)<br /><br />П.С.: рано я расслабился - теперь вылетает на первой же строке кода: <br /><br /><br />П.П.С.: turbo debugger я "сдал в утиль" и теперь пользуюсь более достойным и более мобильным (бесплатный проэкт) INSIGHT версии 123. Даже клавиши как в td. Ещё я поюзал немного AFD pro, но он мне понравился меньше. <br /><br />Плюсы INSIGHT: расположение клавиш (функций) отладчика как в td, не требует для запуска доп. модулей как например td, почти исправно возвращается в cmd ("забывает" очистить экран, делаем вручную cls - и порядок). Минус - в окне отладчика не работает мышка. Всем реккомендую. <br /><br />
http://www.bttr-software.de/products/insight/
<br />Судя по именам, большая часть разработчиков - выходцы СНГ.
#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 - надодь поглядеть ::) сенкс.<br />
Судя по именам, большая часть разработчиков - выходцы СНГ.<br />Ну дык полна земля славянская талантами ;)