singlepost

Проблема с делением в assembler << На главную или назад  

Привет! Если не в лом, объясните, почему ета прога на команде 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

77 ответов в теме “Проблема с делением в assembler”

  1. 7
    Роман Воробец ответил:

    По скорости выполнения команды были идентичны уже начиная с 286. Просто xor занимает немного меньше памяти.

  2. 6
    Володя Квич ответил:

    команда xor eax, eax быстрее, потому что нет обращения к пам'яти (mov eax, 0 — ноль берётса с пам'яти)

  3. 5
    Ростислав Чутков ответил:

    да тут помоему и речи нет об обращении к памяти, да и как можно обратиться к памяти по абсолютному значению, а не по адресу? :)

  4. 4
    Ростислав Чутков ответил:

    ЗЫ. А правда ли что и сейчас (начиная с 486) xor eax, eax работает быстрее чем mov eax, 0 ?

  5. 3
    Роман Воробец ответил:

    Нет, команда div делит значение в регистровой паре edx:eax на аргумент, помещая частное в eax, а остаток в edx. Если частное получается больше 2^32-1, возникает ошибка.

  6. 2
    Володя Квич ответил:

    Помогло, Спасибо!
    Я так понял, команда DIV не может записать остаток в edx, если там чтото есть, да?

  7. 1
    Роман Воробец ответил:

    В edx находится мусор, поэтому результат деления edx:eax на ebx не помещается в eax.

    xor edx, edx

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.