Общий hi. Понадобилось тут получить исключение от переполнения в результате отработки DIV(но без деления на нуль). Всем известно, что подобный код вызовет нужный ексепшн: Код (Text): mov ecx, 02h mov eax, 0400h div cl Так вот, требуется заставить C-транслятор(например, MS'овский) сгенерить подобный фолтовый код. Размерность делителя(8/16/32), ессно мне не важна, ибо главное чтобы полученное соответствующее частное не помещалось в неё. Использование директивы __asm() не подходит. Весь сакс в том, что сам-по-себе-высокоуровневый-контроль-типов/оптимизация/защита от переполнения в данном случае не дают получить требуемое.
Случайно не бетатестером в Мелкософте устроился? Мой ответ сходу - вряд ли что у тебя получится... по стандарту С++ все арифметические вычисления выполняются в int (если ни один из операндов не long), что составляет для Win32, например - 32 бита. Но при делении делимое расширяется до 64 - cdq, например для int и xor edx, edx для unsigned. Но так как частное никак не больше делимого, то увы... больше 32бит ему не бывать... вот если смешать знаковвые и беззнаковые - то неправильный результат получить можно, а ошибку вряд ли. Тут надо совсем невменяемый компилятор найти Разве что на ноль делить, если так важен сам факт ошибки - при максимальной оптимизации ни один нормальный компилер проверок не делает
Тут в принципе нереально сделать переносимый код. Компилятор _всегда_ перед signed div ставит cdq, а перед unsigned div - xor edx,edx.