Привет! Если не в лом, объясните, почему ета прога на команде 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
24 августа 2008 в 14:02
По скорости выполнения команды были идентичны уже начиная с 286. Просто xor занимает немного меньше памяти.
24 августа 2008 в 13:02
команда xor eax, eax быстрее, потому что нет обращения к пам'яти (mov eax, 0 — ноль берётса с пам'яти)
24 августа 2008 в 13:02
да тут помоему и речи нет об обращении к памяти, да и как можно обратиться к памяти по абсолютному значению, а не по адресу?
23 августа 2008 в 23:01
ЗЫ. А правда ли что и сейчас (начиная с 486) xor eax, eax работает быстрее чем mov eax, 0 ?
23 августа 2008 в 16:01
Нет, команда div делит значение в регистровой паре edx:eax на аргумент, помещая частное в eax, а остаток в edx. Если частное получается больше 2^32-1, возникает ошибка.
23 августа 2008 в 15:03
Помогло, Спасибо!
Я так понял, команда DIV не может записать остаток в edx, если там чтото есть, да?
23 августа 2008 в 14:03
В edx находится мусор, поэтому результат деления edx:eax на ebx не помещается в eax.
xor edx, edx