kvych
Гость
|
|
« : 23-08-2008 07:59 » |
|
Привет! Если не в лом, объясните, почему ета прога на команде DIV бросает исключение "unknown software exception (0xc0000095)" Я только начинаю изучать ассемблер...
.386 .model flat,stdcall .data fg dd 10 htable db "0123456789abcdef",0 .code start: mov eax, 20000 mov ebx, fg div ebx ;<------ ret end start
Ассемблер и линкер MASM32. Отладчик - OllyDbg
|
|
|
Записан
|
|
|
|
Basurman
|
|
« Ответ #1 : 23-08-2008 09:34 » |
|
А это программа? Вроде бы синтаксис после .code д.б. примерно: main PROC ; здесь текст программы exit main ENDP END main А вообще-то лучше читать первоисточники. Могу порекомендовать Кип Р. Ирвин "Язык ассемблера для процессоров INTEL".
|
|
|
Записан
|
|
|
|
kvych
Гость
|
|
« Ответ #2 : 23-08-2008 09:43 » |
|
Basurman:Ну да, ето не прога, я просто изучаю команди. Синтаксис у меня нормальний, всьо работает, вот только именно DIV и IDIV вызывают исключение.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #3 : 23-08-2008 10:51 » |
|
А ты уверен, что падает именно там? Единственное исключение, которое может произойти это деление на нуль, насколько я знаю. Если у тебя не бракованный процессор, то скорее всего иши ошибку в другом месте. Например на этом mov ebx, fg или после этого ret
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
|
|
« Ответ #4 : 23-08-2008 19:03 » |
|
...kvych..., как должен завершаться процесс в Win32? Разве простым возвратом управления? Изучи этот момент. И еще совет: когда читаешь "переменную" используй синтаксис со скобками - это понятнее и читабельнее. Кстати, такие короткие глобальные имена - тоже ужас непростительный. Basurman, вовсе не нужно оформлять как процедуру - это не обязательно.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Basurman
|
|
« Ответ #5 : 24-08-2008 12:41 » |
|
Я вообще то хотел подсказать - где и что искать. Ну дам более конкретно: 1. Поскольку используется "div ebx", а делимое двойное слово - не мешало бы добавить "xor edx, edx" или "mov edx, 0". Отсутствие этого, исключения не вызовет, но результат деления непредсказуем - поскольку неизвестно содержимое edx (делимое находится в паре edx:eax). Т.е в данном случае частное может вдруг быть более 2000; 2. В тексте программы должно присутствовать следующее: 2.1. Exitprocess Proto, dwExitcode:Dword 2.2. Invoke Exitprocess, 0 или xor eax, eax push eax call Exitprocess В каком порядке и в каких местах, автор темы разберётся сам. Это вроде бы и должно устранить указанное исключение, если он конечно привёл текст программы, а не извлечения из оного.
To RXL: ну конечно не обязательно. Просто если придерживаться определённого стиля, количество ошибок весьма сильно сократится. Правда побочным эффектом может быть увеличение кода.
|
|
« Последнее редактирование: 24-08-2008 18:25 от Basurman »
|
Записан
|
|
|
|
kvych
Гость
|
|
« Ответ #6 : 24-08-2008 13:22 » |
|
Как я понял, для команды DIV тот регистр, куда будет сбрасыватся остаток (ah, dx или edx) надо первоначально обнулить.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #7 : 24-08-2008 13:45 » |
|
...kvych..., внимательно читай мануал по командам:
div bl ; использует AX div bx ; использует DX:AX dib ebx ; использует EDX:EAX
AX, DX:AX и EDX:EAX выступаю как делимое, так и приемник результата: частное помещается в первую половину, остаток - во вторую половину.
div ebx ; EAX = EDX:EAX / EBX ; EDX = EDX:EAX mod EBX
|
|
« Последнее редактирование: 24-08-2008 13:47 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Serg79
|
|
« Ответ #8 : 10-11-2008 10:05 » |
|
...kvych..., прогони код под отладчиком и посмотри где проблемы!!!
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #9 : 10-11-2008 12:11 » |
|
Ребята, август месяц... Зачем было топик поднимать? Он уже или нашел решение, или забил.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Serg79
|
|
« Ответ #10 : 10-11-2008 15:03 » |
|
RXL, Блин, точно Не обратил внимание на число!
|
|
|
Записан
|
|
|
|
|